jueves, 19 de abril de 2012

Cursores


set serveroutput on;
declare
  primo char(2) := 'si';
  num integer;
begin
  num := to_number('&IngreseNumero');
  dbms_output.put_line('El umero ingresado es: '||num);
  for  i in 2..num - 1
    loop
    if mod(num,i)=0 then
      primo := 'no';
    end if;
  end loop;
  if primo = 'si' then
    dbms_output.put_line('El numero es primo');
  else
    dbms_output.put_line('El numero no es primo');
  end if;
  exception
    when VALUE_ERROR then
    dbms_output.put_line('Error el dato ingresado tiene que ser un numero');
end;


set serveroutput on
declare
  cursor mirPrimerCursor is select employee_id,first_name, from employees;
  vid employees.employee_id%TYPE;
  vnombre employees.first_name%TYPE;
begin
  open  mirPrimerCursor;
  loop
    fetch mirPrimerCursor into vid,vnombre;
    exit when mirPrimerCursor%NOTFOUND;
    dbms_output.put_line('ID: '||vid||' Nombre: '||vnombre);
  end loop;
  close mirPrimerCursor;
end;

set serveroutput on
declare
  cursor mirPrimerCursor is select employee_id,first_name,hire_date from employees ORDER BY hire_date DESC;
  vid employees.employee_id%TYPE;
  vnombre employees.first_name%TYPE;
  vFechaContrato employees.hire_date%TYPE;
  antiguedad integer;
begin
  open  mirPrimerCursor;
  loop
    fetch mirPrimerCursor into vid,vnombre,vFechaContrato;
    exit when mirPrimerCursor%NOTFOUND;
    antiguedad := trunc((sysdate - vFechaContrato)/365);
    if antiguedad= 12 then
      dbms_output.put_line('ID: '||vid||' | Nombre: '||vnombre||' | Antiguedad: '||antiguedad);
    end if;
  end loop;
  close mirPrimerCursor;
end;


set serveroutput on
declare
  cursor miSegundoCursorTabla is select table_name from all_tables where owner = 'HR';
  cursor miSegundoCursorColumnas is select owner,table_name,column_name from all_tab_columns where owner = 'HR';
  vNombreTabla all_tables.table_name%TYPE;
  vOwner all_tab_columns.owner%TYPE;
  vTablaNombre all_tab_columns.table_name%TYPE;
  vNombreColumna all_tab_columns.column_name%TYPE;
begin
  open  miSegundoCursorTabla;
  loop
    fetch miSegundoCursorTabla into vNombreTabla;
    exit when miSegundoCursorTabla%NOTFOUND;
      open  miSegundoCursorColumnas;
      loop
        fetch miSegundoCursorColumnas into vOwner,vTablaNombre,vNombreColumna;
        exit when miSegundoCursorColumnas%NOTFOUND;
        dbms_output.put_line('Tabla: '||vNombreTabla||' Columna: '||vNombreColumna);
      end loop;
      close miSegundoCursorColumnas;
  end loop;
  close miSegundoCursorTabla;
end;

No hay comentarios:

Publicar un comentario