martes, 27 de septiembre de 2011

Obtener dia primerio y ultimo del mes actual (oracle)

Hola:

Pongo una pequeña consulta espero les sirva, es para obtener el dia primero y ultimo del mes anterior al actual en oracle.

select to_date(trunc(trunc(sysdate, 'MM')-1,'MM'),'dd/mm/rrrr') dia_primero_mes_ant
,to_date(last_day(trunc(sysdate, 'MM')-1),'dd/mm/rrrr') dia_fin_mes_ant
from dual

Saludos.

lunes, 5 de septiembre de 2011

Extraer tokens con REGEXP_SUBSTR (Oracle)

Hola:

Muchos lenguejes de programación tienen funciones, clases, etc para extraer los tokens de una cadena ya sea por medio de una expresion regular o por un delimitador, hace ya varios meses me tope con este problemita pero con PL SQL, y un compañero del trabajo se le ocurrio este idea que comparto:

Para nuestro ejemplo sera por el delimitador "-", pero usando una expresion regular por medio de REGEXP_SUBSTR

set serveroutput on;
declare
V_DESC VARCHAR2(200):='1234-Isaac Le-Mew';
N_TOKENS PLS_INTEGER:=0;
V_VAL_RETORNO VARCHAR2(50);
begin
-- Se obtiene el numero de tokens de la cadena
N_TOKENS :=LENGTH(V_DESC) - LENGTH(REPLACE(V_DESC, '-', '')) + 1;
-- Se itera sobre cada uno de los tokens de la cadena
FOR I IN 1 .. N_TOKENS
LOOP
-- Se extrae cada ocurrencia del token empezando siempre desde la posicion 1
V_VAL_RETORNO := REGEXP_SUBSTR(V_DESC,'[^-]+',1,I);
dbms_output.put_line(I||' - '||V_VAL_RETORNO);
END LOOP;
end;
/

el resultado sera algo como lo sisuiente:

anonymous block completed
1 - 1234
2 - Isaac Le
3 - Mew


Saludos, el mundo siempre puede ser mejor....

viernes, 2 de septiembre de 2011

Como extraer los datos de LOV (Lista de valores) por medio de Grupo de Registros (Oracle Forms)

Hola:

Cuando desarrollamos aplicaciones en Oracle Forms siempre nos topamos con hacer cosas que ya estan hechas y no es tan dificil como aparenta.

Un dia muy feliz en mi trabajo me pidieron la opción que dentro de una LOV list, le pusiera la opción de todos, y lo que no queria hacer un bloque de datos con un check box con las opción de todos, puesto que me tardaria muchos dias porque eran muchas listas de valores, asi que encontre como sulucionar esto, quizas alguien encontro una maneras mas simple, pero me gustaria compartir como lo hize.

La funcion PL SQL que ocupe es la siguiente:

FUNCTION L_OBT_ELEMENTS_RGP_SP(v_IdItem VARCHAR2,v_campo VARCHAR2) RETURN VARCHAR2 IS
v_LovName VARCHAR2(150);
v_GroupName VARCHAR2(150);
the_rowcount PLS_INTEGER;
rg_Id RecordGroup;
status PLS_INTEGER;
rec_Count PLS_INTEGER;
v_valIn VARCHAR2(500);
v_valor VARCHAR2(100);
col1 GroupColumn;
v_lon PLS_INTEGER;

BEGIN
NULL;

v_LovName := Get_Item_Property(v_IdItem, LOV_NAME );
v_GroupName := Get_LOV_Property(v_LovName,GROUP_NAME);
rg_Id:= Find_Group(v_GroupName);
status:=Populate_Group(rg_Id);
rec_Count := Get_Group_Row_Count( rg_id );
col1 := Find_Column(v_GroupName||'.'||v_campo);

FOR j IN 1..rec_Count LOOP
v_valor:= GET_GROUP_CHAR_CELL(col1, j );
v_valIn:=v_valIn||v_valor||',';
END LOOP;

v_lon:=LENGTH(v_valIn);
v_valIn:=SUBSTR(v_valIn,1,v_lon-1) ;


return v_valIn;
END;