lunes, 15 de diciembre de 2014

Después de mucho tiempo

Hola:

Hace mucho tiempo que no escribía nada en este blog  y es extraño como muchas cosas pasan en poco tiempo, antes solía estar escribiendo sobre cosas que me resultaban novedosas y curiosas,  de como es estar enamorado y feliz.

Después de trabajar mucho tiempo (6 años jeje) y conocer a diferentes personas, sigo compartiendo lo poco que se con los que laboro, pero siempre pienso que algún día regresare a este que mi blog y escribiré como antes, antes me gustaba m programar ahora las cosas son diferentes y ya casi no programo, eso no quiere decir que no me guste sino que simplemente la vida cambia y nos tenemos que amoldar y seguir adelante, aprendí algo de mainframe (TWS y JCL) y si nunca hubiera dejado eso que me solía gustar quizás nunca hubiera conocido ese S.O.

No me arrepiento de dejar de programar en Java, PLSQL, Forms, sh, etc.  creo que me han servido de complemento y me han ayudado a ver los sistemas de otra manera, como enfocar eso para hacer mejoras de procesos, hasta ver errores en donde antes hubiera creído que todo estaba bien, creo que hay ocasiones  que tenemos que dejar de voltear atrás y seguir, nunca dejar nada para vuelta esforzamos hoy y creer en este país, en especial esta ciudad que es para mí maravillosa.


Espero que pronto este de vuelta con cosas nuevas o para escribir tontadas... Y para decir que lo siento por no luchar por ti pero sé que estas bien y quiero que nunca te rindas porque yo nunca lo voy hacer...  

lunes, 18 de marzo de 2013

Como re-compilar PROCEDURE,PACKAGE,PACKAGE BODY y FUNCTION en Oracle

Hola :

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).




Encontré una herramienta llamada FIFA Development Globe, la cual ayuda a tener un panorama acerca de todas las confederaciones de la FIFA, además de dar información muy relevante por cada país y regiones. Fue desarrollada por Moritz Stefaner que tiene un amplio conocimiento en todo esto del desarrollo de aplicaciones visuales.



martes, 11 de septiembre de 2012

Configurar Spring + Jsf + PostgreSQL en Eclipse parte 2

Hola:

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

Hola:

Navegando por la red encontre esta padre herramienta llamada La evolución de la Web.



Tiene datos super interesantes que ayudan a ver como cada día la web crece en cuanto al contenido que se crea, así como la tecnologías que nos ayudan a manipular y buscar este contenido.

jueves, 14 de junio de 2012

Configurar Spring + Jsf + PostgreSQL en Eclipse

Hola:
 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


Les mostrara una pantalla como la siguiente: En Find buscar Spring y seleccionar Spring IDE y dar clic en el
botón Install






Paso 2. Una vez instalado el plugin de Spring, descarga el servidor tomcat 7 o cualquiero otro servidor , http://tomcat.apache.org/download-70.cgi, lo instalan, si es win7 lo debe instalar en esta ruta C:\Program Files\Apache Software Foundation\Tomcat 7.0.


Paso 3. Ir al Menu->File->New->Other->Web->Dinamic Web Project

Elegir el nombre del proyecto.



El proyecto contiene esta estructura:




Paso 4.  Configurar Spring a nuestro proyecto.Dar clic derecho sobre el proyecto y en la opción de Spring Tools -> Add Spring Project Nature


En caso de que no les genere el web.xml la pestañita de Deployment Descriptor dar clic derecho y seleccionar Generate Deployment Descriptor Sub y listo.



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.



Despues aparecera un asistente para configurar nuestro servidor Web.




Seleccionamos las opciones que estan el los recuadros de color Rojo y Despues el boton Finish para ambas ventanas.

Si todo quedo bien configurado se mostrara una pagina el blanco como la siguiente:





viernes, 11 de noviembre de 2011

Copiar elementos de una Lista a Otra, subir y bajar en oracle forms (PL/SQL)

Hola:

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)

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;

martes, 23 de agosto de 2011

REGEXP_SUBSTR en oracle

Hola: (Hay problemas con las pipes)

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)

Hola:

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)
);

Paso 2. Creamos una colección de datos con el tipo de dato persona
TYPE listaPersonas  IS  TABLE OF persona;
listPers listaPersonas := listaPersonas();

Es necesario aclarar que esta tabla solo estará disponible cuando se llame al paquete, función o procedimiento, para agregar elementos a la colección (TABLA) se llama a metodo extend (añade una instancia)

Ejemplo:
listPers.extend;
listPers(indice).nombre := 'Josue ';
listPers(indice).edad :=25;

indice es el subíndice de la tabla, este indica la posición en que hace referencia la instancia que estamos asignando

Paso 3. Necesitamos crear una función PIPELINED, esta función sirve para manejar volúmenes de información cuando no se desea guardar los datos físicamente en alguna tabla de la base de datos, en resumen la función de PIPELINED son útiles si hay una necesidad de una fuente de datos que no sea una tabla en una instrucción select.


 
FUNCTION getRows RETURN listaPersonas PIPELINED IS
BEGIN
FOR i IN listPers.first..listPers.last LOOP 
PIPE ROW ( listPers(i) );
END LOOP;  RETURN;
END getRows;

El codigo completo es el siguiente:
create or replace PACKAGE         PR_EJEMPLO_Pipelined  IS
TYPE persona IS RECORD        
(            
nombre VARCHAR2(100),      
edad NUMERIC(2)
);
TYPE listaPersonas  IS  TABLE OF persona;
listPers listaPersonas := listaPersonas();
PROCEDURE OBTPERSONAS;
FUNCTION getRows RETURN listaPersonas PIPELINED;
END;
/

create or replace PACKAGE BODY PR_EJEMPLO_Pipelined  IS

PROCEDURE OBTPERSONAS IS
IND NUMBER := 0; 
type personas_cursor is REF CURSOR;
BEGIN
listPers.delete;
WHILE(IND<20)       
LOOP               
IND := IND + 1;
listPers.extend;
listPers(IND).nombre := 'Josue '||IND;
listPers(IND).edad := IND;
END LOOP;
for x in listPers.first..listPers.last  loop
dbms_output.put_line(listPers(x).nombre||' - '||listPers(x).edad);
end loop;


for p in ( SELECT * from  TABLE(getRows) ) loop
dbms_output.put_line('tabla temporal '||p.nombre||' - '||p.edad);
end loop;

end;

FUNCTION getRows RETURN listaPersonas PIPELINED IS
BEGIN
FOR i IN listPers.first..listPers.last LOOP 
PIPE ROW ( listPers(i) );
END LOOP;  RETURN;
END getRows;

END PR_EJEMPLO_Pipelined ;
 /

martes, 22 de marzo de 2011

Grid en swingx (Parte 2)

Hola:


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.