lunes, 10 de abril de 2017

Procedimiento que inserte en una tabla desde 1 hasta valor pasado por parámetro | Oracle

--creación de objetos
create table numeros(numero number);
delete from numeros;
insert into numeros values(1);
insert into numeros values(2);
insert into numeros values(3);
--Mostrar los números del 1 al parametro
CREATE OR REPLACE PROCEDURE mostrarNumeros1Ub (
  Ub number
) IS
  vCont number;
BEGIN
  -- vContamos de 1 a Ub
  vCont := 0;
  loop
    vCont := vCont + 1;
    exit when vCont > Ub;
    insert into numeros values(vCont);
    --dbms_output.put_line('Iteración número ' || vCont);
  end loop;
END;
/
show errors
set serveroutput on;
EXEC mostrarNumeros1Ub(5);

Procedimiento que muestra números desde valor mínimo hasta máximo con saltos pasado por parámetros | Oracle

CREATE OR REPLACE PROCEDURE mostrarNumerosLbUbStep (
  pLb    IN     number, 
  pUb    IN     number, 
  pStep  IN     number   DEFAULT   1
) IS
  vCont  number;
BEGIN
  -- contamos de pLb a pUb
  vCont := pLb-pStep;
  loop
    vCont := vCont + pStep;
    exit when vCont > pUb;
    dbms_output.put_line('Iteración número ' || 
    to_char((vCont-pLb+pStep)/pStep));
  end loop;
END;
/
show errors
set serveroutput on;
EXEC mostrarNumerosLbUbStep(1990,1995,0.5);
EXEC mostrarNumerosLbUbStep(1990,1995,0.1);
EXEC mostrarNumerosLbUbStep(1990,1995,2);

Procedimiento PL/SQL para mostrar desde 1 hasta valor pasado por parámetro | Oracle

--Mostrar los números del 1 al parametro
CREATE OR REPLACE PROCEDURE mostrarNumeros1Ub (
  Ub number
) IS
  vCont number;
BEGIN
  -- vContamos de 1 a Ub
  vCont := 0;
  loop
    vCont := vCont + 1;
    exit when vCont > Ub;
    dbms_output.put_line('Iteración número ' || vCont);
  end loop;
END;
/
show errors
set serveroutput on;
EXEC mostrarNumeros1Ub(5);

Ejemplo de Cursor | Oracle

CREATE OR REPLACE
PROCEDURE P_2
AS
--Creamos cursor con sentencia dentro
CURSOR CUR_1 IS
SELECT DISTINCT APELLIDO,ESTADO
FROM PERSONA P
INNER JOIN EMPLEADO EM ON EM.CODEMP = P.CODPER
INNER JOIN ORDENMEDICA O ON O.CODMED = EM.CODEMP
ORDER BY APELLIDO;
--Creamos variables 
APEL VARCHAR2(25);
ESTAD VARCHAR2(1);

BEGIN
--Abrimos el cursor
OPEN CUR_1;
/* Recorremos a primera posición y 
almacenamos en las variables */
FETCH CUR_1 INTO APEL,ESTAD;
--Creamos bucle mientras haya loop
WHILE CUR_1 % FOUND LOOP
--Mostramos por pantalla 
DBMS_OUTPUT.PUT_LINE(APEL||'*'||ESTAD);
/* Recorremos a siguiente posicion y 
almacenamos en las variables */
FETCH CUR_1 INTO APEL,ESTAD;
--Terminamos loop
END LOOP;
--Cerramos cursor
CLOSE CUR_1;
--Cerramos procedimiento
END;

Diagrama: