Java, PL/SQL, Gwt, Spring, Oracle Forms, Unix, y todo lo que se me ocurra, se libre, comparte, el conocimiento es de todos.
lunes, 15 de diciembre de 2014
Después de mucho tiempo
lunes, 18 de marzo de 2013
Como re-compilar PROCEDURE,PACKAGE,PACKAGE BODY y FUNCTION en Oracle
Cuando creamos campos nuevos en tablas de la base de datos o creamos tablas nuevas, muchos paquetes, procedimientos y funciones de la base de datos quedan des-compilados debido a la relación que tienen con la nueva creación de objetos, dependiendo el lugar donde trabajen los dba´s se encargan de re-compilar pero muchas veces no está por demás saberlo así que me puse a investigar una manera de hacerlo espero sea útil.
Si tienes los suficientes permisos puedes ocupar dba_objects en lugar de all_objects
/* Hola :-) */
set serverout on;
BEGIN
FOR compilacion
IN ( SELECT 'ALTER '
|| DECODE (object_type,
'PACKAGE BODY', 'PACKAGE',
object_type)
|| ' '
|| owner
|| '.'
|| object_name
|| ' compile '
|| DECODE (object_type, 'PACKAGE BODY', 'BODY', '')
AS com
FROM all_objects
WHERE owner = 'PRUEBA'
AND object_type IN
('PROCEDURE',
'PACKAGE',
'PACKAGE BODY',
'FUNCTION')
AND status = 'INVALID'
ORDER BY object_id ASC)
LOOP
BEGIN
EXECUTE IMMEDIATE compilacion.com;
DBMS_OUTPUT.put_line (compilacion.com || ' OK');
EXCEPTION
WHEN OTHERS
THEN
DBMS_OUTPUT.put_line (compilacion.com);
DBMS_OUTPUT.put_line (SQLERRM);
END;
END LOOP;
END;
/
Saludos.
miércoles, 9 de enero de 2013
Visualización de la información (FIFA).
martes, 11 de septiembre de 2012
Configurar Spring + Jsf + PostgreSQL en Eclipse parte 2
Ahora tenemos que configurar el archivo de configuración de Spring, para esto debemos crear un paquete en nuestro proyecto, ya que ocuparemos annotations (@) para hacerlo mas simple, no voy a entrar en detalles, en que si la annotations son complicadas o simples dentro de la vida del desarrollo de un proyecto.
Paso 1. Creamos un paquete donde en nuesta carpeta de Java Resources con el nombre que quieran:
Paso 2.
domingo, 15 de julio de 2012
Visualización de la información
Navegando por la red encontre esta padre herramienta llamada La evolución de la Web.
jueves, 14 de junio de 2012
Configurar Spring + Jsf + PostgreSQL en Eclipse
Tengo tiempo que no escribo nada al menos de Java, encontré muchas entradas y blogs para configurar esto, así que decidí hacerlo en una solo entrada de mi blog.
No se necesitan conocer mucho de estas herramientas de Java, voy a explicar paso a paso como lograrlo.
Ingredientes:
Saber algo de Java.
Eclipse Indigo Service Release 2.
Spring (Básico-Intermedio).
Jsf (Básico-Intermedio).
Sql (Muy Básico para esta parte).
Html (Muy básico).
Paso 1. Descargar Eclipse Indigo de su pagina: http://www.eclipse.org/downloads/packages/eclipse-ide-java-ee-developers/indigosr2
Paso 2. Una vez instalado ir a la opción de menú Help ->Eclipse Marketplace
El proyecto debe tener una S en la carpeta principal y debe tener la siguiente estructura.
Paso 5. Creamos una jsp llamado index.jsp en la carpeta de WebContent y damos clic derecho sobre nuestro proyecto y lo ejecutaremos.
viernes, 11 de noviembre de 2011
Copiar elementos de una Lista a Otra, subir y bajar en oracle forms (PL/SQL)
Para poder hacer este ejemplo es necesario saber PL/SQL y un poco de Oracle Forms, este ejemplo espero y le pueda servir a alguien, bueno a mi me sirvio para la parte del proyecto en el que trabaje.
Paso 1.
Tenemos que construir un bloque de datos de manera manual lo llamaremos LISTA:
Mostrara un asistente como el siguiente:

Paso 2. Creado el bloque de datos LISTA, ir al apartado de Lienzos, abrir el CANVAS2 o como se llame en su proyecto, mostrara una ventana con el canvas, en la opción Canvas: seleccionar CANVAS2 y en Block: LISTA .

Paso 3: Arrastar todos los elementos: La lista es el Elemento de Lista de la barra de herramientas vertical.

Ir a la las propiedades del Elemento y en el apartado Funcional en la opción Estilo de Lista seleccionar Lista de Texto, esto se tendra que hacer para cada lista.

El diseño debe quedar parecido al de la imagen de arriba.
Paso 4. Debemos cargar Datos e nuestra Lista, se puede hacer desde la base Datos, pero por ahora no pondre esa parte, los pondremos en codigo duro.
Ir a las propiedades de la Lista principal, en el apartado Funcional seleccionar la opción Elementos de Lista , preisionar el boton More..., mostrara una ventana de List Elements, en esta podemos dar de alta los elementos y sus valores.

Paso 5. Para agregar el Trigger( Disparador, para los programan en Java un Evento) o nuestro boton debemos contar con los siguientes elementos:
Nuestro formulario debe tener los siguientes elementos:
LIST_ELEMENT
LIST_ELEMENT_END
BTN_ADD_ELEMET
BTN_ADD_ALL_ELEMET
BTN_DEL_ELEMENT
BTN_DEL_ALL_ELEMENT
BTN_UP_ELEMENT
BTN_DOWN_ELEMENT
Como se muestra en la siguiente imagen:
Ahora tenemos que agregar el disparador WHEN-BUTTON-PRESSED al boton BTN_ADD_ELEMET:
En el editor de codigo poner el siguiente codigo:
DECLARE
l_count INTEGER;
l_text VARCHAR2(100);
l_value VARCHAR2(100);
n_index_borrar INTEGER:=-1;
BEGIN
--Cuenta el numero de elementos de la lista
l_count := GET_LIST_ELEMENT_COUNT('LIST_ELEMENT');
--Itera por cada elemento de lista
FOR i in 1..l_count LOOP
--Valida si el elemento de la lista es el seleccionado
IF GET_LIST_ELEMENT_VALUE('LIST_ELEMENT',i) = :LIST_ELEMENT THEN
l_text := GET_LIST_ELEMENT_LABEL('LIST_ELEMENT',i);
l_value:= GET_LIST_ELEMENT_VALUE ('LIST_ELEMENT',i);
Add_List_Element('LIST_ELEMENT_END',1,l_text,l_value);
n_index_borrar:=i;
END IF;
END LOOP;
--elimina el elemento de la lista
IF n_index_borrar <> -1 THEN
DELETE_LIST_ELEMENT ('LIST_ELEMENT',n_index_borrar);
END IF;
END;
BTN_ADD_ALL_ELEMET agregamos el disparador WHEN-BUTTON-PRESSED y en editor el siguiente codigo
DECLARE
l_count INTEGER;
l_text VARCHAR2(100);
l_value VARCHAR2(100);
n_index_borrar INTEGER:=-1;
BEGIN
l_count := GET_LIST_ELEMENT_COUNT('LIST_ELEMENT');
FOR i in 1..l_count LOOP
l_text := GET_LIST_ELEMENT_LABEL('LIST_ELEMENT',i);
l_value:= GET_LIST_ELEMENT_VALUE ('LIST_ELEMENT',i);
IF TRIM(l_text) is not null THEN
Add_List_Element('LIST_ELEMENT_END',i,l_text,l_value);
n_index_borrar:=i;
END IF;
END LOOP;
IF n_index_borrar <> -1 THEN
CLEAR_LIST('LIST_ELEMENT');
END IF;
END;
BTN_ADD_ALL_ELEMET agregamos el disparador WHEN-BUTTON-PRESSED y en editor el siguiente codigo
DECLARE
l_count INTEGER;
l_text VARCHAR2(100);
l_value VARCHAR2(100);
n_index_borrar INTEGER:=-1;
BEGIN
l_count := GET_LIST_ELEMENT_COUNT('LIST_ELEMENT_END');
FOR i in 1..l_count LOOP
l_text := GET_LIST_ELEMENT_LABEL('LIST_ELEMENT_END',i);
l_value:= GET_LIST_ELEMENT_VALUE ('LIST_ELEMENT_END',i);
IF TRIM(l_text) is not null THEN
Add_List_Element('LIST_ELEMENT',i,l_text,l_value);
n_index_borrar:=i;
END IF;
END LOOP;
IF n_index_borrar <> -1 THEN
CLEAR_LIST('LIST_ELEMENT_END');
END IF;
END;
BTN_ADD_ELEMET agregamos el disparador WHEN-BUTTON-PRESSED y en editor el siguiente codigo
DECLARE
l_count INTEGER;
l_text VARCHAR2(100);
l_value VARCHAR2(100);
n_index_borrar INTEGER:=-1;
BEGIN
l_count := GET_LIST_ELEMENT_COUNT('LIST_ELEMENT_END');
FOR i in 1..l_count LOOP
IF GET_LIST_ELEMENT_VALUE('LIST_ELEMENT_END',i) = :LIST_ELEMENT_END THEN
l_text := GET_LIST_ELEMENT_LABEL('LIST_ELEMENT_END',i);
l_value:= GET_LIST_ELEMENT_VALUE ('LIST_ELEMENT_END',i);
Add_List_Element('LIST_ELEMENT',1,l_text,l_value);
n_index_borrar:=i;
END IF;
END LOOP;
IF n_index_borrar <> -1 THEN
DELETE_LIST_ELEMENT ('LIST_ELEMENT_END',n_index_borrar);
END IF;
END;
Para subir un elemento de la lista LIST_ELEMENT_END se configura el siguiente disparador WHEN-BUTTON-PRESSED en el boton BTN_UP_ELEMENT con este código
DECLARE
l_count INTEGER;
l_text VARCHAR2(100);
l_value VARCHAR2(100);
l_text2 VARCHAR2(100);
l_value2 VARCHAR2(100);
bandera INTEGER:=0;
BEGIN
l_count := GET_LIST_ELEMENT_COUNT('LIST_ELEMENT_END');
FOR i in 1..l_count LOOP
IF GET_LIST_ELEMENT_VALUE('LIST_ELEMENT_END',i) = :LIST_ELEMENT_END AND bandera=0 AND i <> 1 THEN
l_text := GET_LIST_ELEMENT_LABEL('LIST_ELEMENT_END',i);
l_value:= GET_LIST_ELEMENT_VALUE ('LIST_ELEMENT_END',i);
l_text2 := GET_LIST_ELEMENT_LABEL('LIST_ELEMENT_END',i-1);
l_value2:= GET_LIST_ELEMENT_VALUE ('LIST_ELEMENT_END',i-1);
Add_List_Element('LIST_ELEMENT_END',i-1,l_text,l_value);
Add_List_Element('LIST_ELEMENT_END',i,l_text2,l_value2);
DELETE_LIST_ELEMENT ('LIST_ELEMENT_END',i);
DELETE_LIST_ELEMENT ('LIST_ELEMENT_END',i+1);
bandera:=1;
END IF;
END LOOP;
END;
Para bajar un elemento de la lista LIST_ELEMENT_END se configura el siguiente disparador WHEN-BUTTON-PRESSED en
el boton BTN_DOWN_ELE con este código
DECLARE
l_count INTEGER;
l_text VARCHAR2(100);
l_value VARCHAR2(100);
l_text2 VARCHAR2(100);
l_value2 VARCHAR2(100);
bandera INTEGER:=0;
BEGIN
l_count := GET_LIST_ELEMENT_COUNT('LIST_ELEMENT_END');
FOR i in 1..l_count LOOP
IF GET_LIST_ELEMENT_VALUE('LIST_ELEMENT_END',i) = :LIST_ELEMENT_END AND bandera=0 AND (l_count) <> i THEN
l_text := GET_LIST_ELEMENT_LABEL('LIST_ELEMENT_END',i);
l_value:= GET_LIST_ELEMENT_VALUE ('LIST_ELEMENT_END',i);
l_text2 := GET_LIST_ELEMENT_LABEL('LIST_ELEMENT_END',i+1);
l_value2:= GET_LIST_ELEMENT_VALUE ('LIST_ELEMENT_END',i+1);
Add_List_Element('LIST_ELEMENT_END',i+1,l_text,l_value);
Add_List_Element('LIST_ELEMENT_END',i,l_text2,l_value2);
DELETE_LIST_ELEMENT ('LIST_ELEMENT_END',i+1);
DELETE_LIST_ELEMENT ('LIST_ELEMENT_END',i+2);
bandera:=1;
END IF;
END LOOP;
END;
Para que la lista fin este limpia (LIST_ELEMENT_END), cuando crea un nueva instancia se configura un disparador WHEN-NEW-FORM-INSTANCE con el siguiente código
CLEAR_LIST ('LIST_ELEMENT_END');
Cuando se recuperan datos desde la base de datos de tiene hacer una función para llenar la lista principal y la lista fin,en otra entrada mostrare como hacerlo.
Si ejecutamos hasta aqui nuestro pequeño proyecto ya podremos copiar un elemento de una lista a la otra:
continuara...
Se feliz, libre, sueño por un mundo mejor.......
martes, 27 de septiembre de 2011
Obtener dia primerio y ultimo del mes actual (oracle)
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)
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)
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;
martes, 23 de agosto de 2011
REGEXP_SUBSTR en oracle
Tengo tiempo trabajando con esta función de oracle REGEXP_SUBSTR y me gustaría compartir el uso que se le puede dar.
Supongamos que tenemos una cadena, el ejemplo mas claro es para los impuestos del SAT le llaman cadena original y se guarda con delimitadores su estándar es el pipe pero usaremos ";" para este ejemplo:
Cadena Original:
;; A;1;2005-09-02T16:30:00;1;ISP900909Q88;Industrias del Sur Poniente, S.A. de C.V.;Alvaro Obregón;37;3;Col. Roma Norte;México;Cuauhtémoc;Distrito Federal;México;06700;Pino Suarez;23;Centro;Monterrey;Monterrey;Nuevo Léon;México;95460;CAUR390312S87;Rosa María Calderón Uriegas;Topochico;52;Jardines del Valle;Monterrey;Monterrey;Nuevo León;México;95465;10;Caja;Vasos decorados;20;200;1;pieza;Charola metálica;150;150;IVA;52.5 ;;
Supongamos que este dato lo guardamos en un campo de la base de datos y queremos extraer la razón social.
Usamos la siguiente expresión dentro de la consulta:
REGEXP_SUBSTR(campo de tipo varchar2 o tipos parecidos, expresión regular,
posición del campo en que va iniciar,numero de ocurrencia)
SELECT REGEXP_SUBSTR(';; A;1;2005-09-02T16:30:00;1;ISP900909Q88;Industrias del Sur Poniente, S.A. de C.V.;
Alvaro Obregón;37;3;Col. Roma Norte;México;Cuauhtémoc;Distrito Federal;México;06700;Pino Suarez;23;Centro;Monterrey;
Monterrey;Nuevo Léon;México;95460;CAUR390312S87;Rosa María Calderón Uriegas;Topochico;52;Jardines del Valle;Monterrey;Monterrey;
Nuevo León;México;95465;10;Caja;Vasos decorados;20;200;1;pieza;Charola metálica;150;150;IVA;52.5 ;;','[^;]+',3,6) FROM DUAL
Ahora lo que quiere decir los parámetros es lo siguiente:
[^;]+ va a separar los tokens que contengan este expresión regular
3 va a empezar en la posición 3 de la cadena, va eliminar los dos primeros
la cadena quedaría de la siguiente manera:
A;1;2005-09-02T16:30:00;1;ISP900909Q88;Industrias del Sur Poniente, S.A. de C.V.;Alvaro Obregón;37;3;Col. Roma Norte;México;
Cuauhtémoc;Distrito Federal;México;06700;Pino Suarez;23;Centro;Monterrey;Monterrey;Nuevo Léon;
México;95460;CAUR390312S87;Rosa María Calderón Uriegas;Topochico;52;Jardines del Valle;Monterrey;
Monterrey;Nuevo León;México;95465;10;Caja;Vasos decorados;20;200;1;pieza;Charola metálica;150;150;IVA;52.5 ;;
El parámetro 6 que es la ocurrencia,para nuestra expresión separa la cadena de esta manera:
A ocurrencia 1
1 ocurrencia 2
2005-09-02T16:30:00 ocurrencia 3
1 ocurrencia 4
ISP900909Q88 ocurrencia 5
Industrias del Sur Poniente, S.A. de C.V. ocurrencia 6
Alvaro Obregón ocurrencia 7
.
.
n ocurrencia 7
sábado, 4 de junio de 2011
Como hacer una cursor de una tabla de tipo record? (PL/SQL)
Todos alguna vez cuando programamos en PL/SQL nos topamos con el problema de retornar un cursor pero los campos se encuentran en distinas tablas y ademas debemos tener validaciones de x tipo, sumado a esto no podemos crear una GLOBAL TEMPORARY TABLE.
Paso 1. Creamos un record con los tipo de datos que deseamos utilizar, para una mejor practica recomiendo el uso de esquema.nombretabla.campo%TYPE
TYPE persona IS RECORD
(
nombre VARCHAR2(100),
edad NUMERIC(2)
);
El codigo completo es el siguiente:
martes, 22 de marzo de 2011
Grid en swingx (Parte 2)
Para la parte crearemos un la parte del modelo el cual servira para mostrar datos en nuestro tabla de swing, es muy simple solo debemos hacer lo siguiente:
1.- Vamos a crear una JFrame en donde colocaremos nuestro JPanelGrid, netbeans tiene una manera fácil y rápida de hacerlo File/New File/Swing GUI Forms/ en la opción de Files types seleccionar JFrameForm y next
Aparecerá un panel en donde tienen que poner el nombre la clase para este ejemplo se llamara JFramePrincipal.
Ahora ya tendremos una ventana en donde podremos colocar nuestro JPanelGrid, pero antes de agregarlo vamos a las propiedades de la tabla su nombre es jXTable1, en las propiedades hay una que se llama model
entramos ha esta y eliminamos todas las columnas y renglones, después damos clic en botón OK, en la imagen de abajo muestro como hacerlo.
Después compilamos con F9 nuestra clase llamada JPanelGrid y para adherirlo a nuestro JFramePrincipal solo es necesario arrastrar nuestra Clase JPanelGrid en JFramePricipal que esta en modo diseño.
Para probar que todo hasta aquí va funcionando de maravilla solo necesitamos ejecutar (Run File) la clase JFramePrincipal y nos tiene que abrir una ventana con un grid vacio.



















