jueves, 26 de abril de 2012

Clase 25 de Abril

--CURSOR : ESPACIO DE MEMORIA EN DONDE SE ALMACENA EL RESULTADO DE UNA CONSULTA, PARA DESPUES PROCESARLA--
set serveroutput on;

  DECLARE
      vPropietario         varchar2(40);
      vNombreTabla         varchar2(40);
        vNombreColumna     varchar2(100);

        /* Primer cursor */
        cursor obtieneTablas is
        select distinct t.owner, t.table_name
        from all_tables t
        where t.owner = 'HR';

        /* 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();
    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;


-- PASO DE PARAMETROS EN CURSORES--
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('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;


--CREAR PROCEDIMIENTOS--
CREATE PROCEDURE catuser;
-- se omite el declare--

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('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 CATUSER;


No hay comentarios:

Publicar un comentario