martes, 1 de mayo de 2012

Cursores y procedure


set serveroutput on
DECLARE
 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('SYSTEM');
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;

CREATE OR REPLACE PROCEDURE CATUSER(pOwner all_tables.owner%type) AS

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

set serveroutput on
begin
  CATUSER('SYSTEM');
end catuser;

No hay comentarios:

Publicar un comentario