miércoles, 24 de octubre de 2012

POWERBUILDER - ORACLE - PROCEDURE - REF CURSOR -

Aqui un ejemplo sencillo de como llamar un procedimiento almacenado de ORACLE que nos devuelve un REF CURSOR , No lo llamaremos por un datawindow si no lo llamaremos a un cursor dentro de powerBuilder 12 .

Abrimos el ORACLE SQL DEVELOPER, entrar con un usuario de privilegios para para crear tablas y procedimientos. Aqui esta el script:

1. CREACION DE LA TABLA Y DE LOS REGISTROS RESPECTIVOS


CREATE TABLE temp_menu (
                codigo number,
                descripcion varchar2(100),
                orden varchar2(50),
                nivel number,
                apertura varchar2(20),
                objeto varchar2(50));

INSERT INTO temp_menu VALUES (
                1,
                'ARCHIVO',
                '001',
                1,
                'O',
                NULL);
INSERT INTO temp_menu VALUES (
                2,
                'INICIO',
                '002',
                1,
                'O',
                NULL);
INSERT INTO temp_menu VALUES (
                3,
                'ENVIAR Y RECIBIR',
                '003',
                1,
                'O',
                NULL);
INSERT INTO temp_menu VALUES (
                4,
                'CARPETA',
                '004',
                1,
                'O',
                NULL);
INSERT INTO temp_menu VALUES (
                5,
                'VISTA',
                '005',
                1,
                'O',
                NULL);
INSERT INTO temp_menu VALUES (
                6,
                'GUARDAR',
                '001001',
                2,
                'O',
                NULL);
INSERT INTO temp_menu VALUES (
                7,
                'GUARDAR COMO',
                '001002',
                2,
                'O',
                NULL);
INSERT INTO temp_menu VALUES (
                8,
                'INFORMACION',
                '001003',
                2,
                'O',
                NULL);
INSERT INTO temp_menu VALUES (
                9,
                'CONFIGURACION DE LA CUENTA',
                '001003001',
                3,
                'O',
                NULL);
INSERT INTO temp_menu VALUES (
                10,
                'HERRAMIENTAS DE LIMPIEZA',
                '001003002',
                3,
                'O',
                NULL);
INSERT INTO temp_menu VALUES (
                11,
                'ADMINISTRAR REGLAS Y ALERTAS',
                '001003003',
                3,
                'O',
                NULL);
INSERT INTO temp_menu VALUES (
                12,
                'LIMPIEZA DE BUZON',
                '001003002001',
                4,
                'W',
                NULL);
INSERT INTO temp_menu VALUES (
                13,
                'VACIAR CARPETA ELEMENTO ELIMINADOS',
                '001003002002',
                4,
                'W',
                NULL);
INSERT INTO temp_menu VALUES (
                14,
                'ARCHIVAR',
                '001003002003',
                4,
                'W',
                NULL);
                
                commit ;

2. CREACION DE UN PAQUETE 


create or replace
PACKAGE TIPO_RETORNO AS 
 type CURSOR_DINAMICO is REF CURSOR;
END TIPO_RETORNO;



3. CREACION DE UN PROCEDURE


CREATE OR REPLACE  PROCEDURE SP_MENU
( VO_CURSOR      out TIPO_RETORNO.CURSOR_DINAMICO)
IS
BEGIN
OPEN VO_CURSOR FOR
SELECT orden, descripcion, SUBSTR(orden, 1,3) as origen, nivel,to_number(substr(orden, 1,50))as det1 from temp_menu order by orden asc ;
END ;


4. CREAR APLICATIVO EN POWERBUILDER


En PowerBuilder, creamos una ventana y le adicionamos un Treeview y lo ponemos como nombre tv_dinamico. Para hacer este ejemplo ya se debe tener la conexión establecida con la base de datos.
En el evento OPEN de la ventana que contiene el objeto treeview digitamos lo siguiente:


string ls_orden, ls_descripcion, ls_origen,ls_nivel,det1 
Long  ll_lev0, ll_lev1, ll_lev2
TreeViewItem  ltvi_root, ltvi_node

DECLARE pro_menu PROCEDURE FOR sp_menu USING SQLCA;
EXECUTE pro_menu ;
if SQLCA.SQLcode <> 0 then
                messagebox('error', sqlca.SQLErrText)
end if
FETCH pro_menu INTO :ls_orden, :ls_descripcion, :ls_origen,:ls_nivel,:det1 ;
DO WHILE SQLCA.SQLcode = 0
ltvi_root.Label =ls_descripcion
ll_lev1 = tv_dinamico.InsertItemLast( 0, ltvi_root )
FETCH pro_menu INTO  :ls_orden, :ls_descripcion, :ls_origen,:ls_nivel,:det1 ;
 LOOP;



Y solo ejecutamos y listo. Aqui tengo una imagen sencilla de dicho ejemplo. Lo que deseaba mostrar era el como obtener los registros de un procedure de Oracle asi como el uso del REF CURSOR.







2 comentarios:

  1. como sería la conexion puedes citarla el sqlca de conexión a Oracle

    ResponderEliminar
  2. Bet365 online bookmakers free bets 2021 - CasinoFreak.com 카지노 카지노 m88 m88 604Roulette Betway: Best Online Betting and Gambling Site

    ResponderEliminar