viernes, 27 de abril de 2012

Cursores - Procedimiento Almacenado


--CURSOR 1
set serveroutput on
DECLARE
 vPropietario varchar2(40);
 vNombreTabla varchar2(40);
    vNombreColumna varchar2(100);
        /* Primer cursor */
        cursor obtieneTablas(pPropietario all_tables.owner%type ) is
        select distinct t.owner, t.table_name
        from all_tables t
        where t.owner = pPropietario;
        /* Segundo cursor */
        cursor obtieneColumnas is
        select distinct c.column_name
        from all_tab_columns c
        where c.owner = vPropietario
        and c.table_name = vNombreTabla;      
begin
   open obtieneTablas('HR');
dbms_output.put_line('Abriendo Cursor - obtieneTablas');
loop fetch obtieneTablas into vPropietario, vNombreTabla;
   exit when obtieneTablas%NOTFOUND;
   dbms_output.put_line('Tabla : '||vPropietario||'.'||vNombreTabla);
       open obtieneColumnas;
       loop fetch obtieneColumnas into vNombreColumna;
     exit when obtieneColumnas%NOTFOUND;
         dbms_output.put_line('=>'||vNombreTabla||'.'||vNombreColumna);
       end loop;
       close obtieneColumnas;
   end loop;
close obtieneTablas;
EXCEPTION
WHEN OTHERS THEN
raise_application_error(-20001,'Se ha detectado un error - '||SQLCODE||' -ERROR- '||SQLERRM);
end;

--CURSOR CON PROCEDIMIENTO ALMACENADO

CREATE OR REPLACE PROCEDURE CATUSER AS
vPropietario varchar2(40);
vNombreTabla varchar2(40);
vNombreColumna varchar2(100);
        /* Primer cursor */
        cursor obtieneTablas(pPropietario all_tables.owner%type ) is
        select distinct t.owner, t.table_name
        from all_tables t
        where t.owner = pPropietario;
        /* Segundo cursor */
        cursor obtieneColumnas is
        select distinct c.column_name
        from all_tab_columns c
        where c.owner = vPropietario
        and c.table_name = vNombreTabla;      
begin
   open obtieneTablas('HR');
dbms_output.put_line('Abriendo Cursor - obtieneTablas');
loop fetch obtieneTablas into vPropietario, vNombreTabla;
   exit when obtieneTablas%NOTFOUND;
   dbms_output.put_line('Tabla : '||vPropietario||'.'||vNombreTabla);
       open obtieneColumnas;
       loop fetch obtieneColumnas into vNombreColumna;
     exit when obtieneColumnas%NOTFOUND;
         dbms_output.put_line('=>'||vNombreTabla||'.'||vNombreColumna);
       end loop;
       close obtieneColumnas;
   end loop;
close obtieneTablas;
EXCEPTION
WHEN OTHERS THEN
raise_application_error(-20001,'Se ha detectado un error - '||SQLCODE||' -ERROR- '||SQLERRM);
end CATUSER;

-----CURSOR 2



create or replace PROCEDURE CATUSER (pOwner all_tables.owner%type) as --indicamos el tipo de parametro
vPropietario all_tables.owner%type;
vNombreTabla   varchar2(40);
vNombreColumna varchar2(100);
        /* Primer cursor */
        cursor obtieneTablas(pPropietario all_tables.owner%type) is
        select distinct t.owner, t.table_name
        from all_tables t
        where t.owner = pPropietario;
        /* Segundo cursor */
        cursor obtieneColumnas is
        select distinct c.column_name
        from all_tab_columns c
        where c.owner = vPropietario
        and c.table_name = vNombreTabla;      
begin
   open obtieneTablas(pOwner);--definimos el parametros a consultar
dbms_output.put_line('Abriendo Cursor - obtieneTablas');
loop fetch obtieneTablas into vPropietario, vNombreTabla;
   exit when obtieneTablas%NOTFOUND;
   dbms_output.put_line('Tabla : '||vPropietario||'.'||vNombreTabla);
       open obtieneColumnas;
       loop fetch obtieneColumnas into vNombreColumna;
     exit when obtieneColumnas%NOTFOUND;
         dbms_output.put_line('=>'||vNombreTabla||'.'||vNombreColumna);
       end loop;
       close obtieneColumnas;
   end loop;
close obtieneTablas;
EXCEPTION
WHEN OTHERS THEN
raise_application_error(-20001,'Se ha detectado un error - '||SQLCODE||' -ERROR- '||SQLERRM);
end CATUSER;


No hay comentarios:

Publicar un comentario