El dia de hoy trabajaremos con un poco de procedimientos almacenados en Oracle: Este procedimiento esta hecho con la intencion de insertar 2000 numeros aleatorios del 0 al 10 en una tabla que contiene notas de examenes:
Lo primero que haremos sera crear nuestra tabla donde guardaremos la informacion:
/**CREACION DE TABLA**/ CREATE TABLE "NOTAS" ( "NOTA_ID" NUMBER NOT NULL ENABLE, "PRIMER_PARCIAL" NUMBER, "SEGUNDO_PARCIAL" NUMBER, "EXAMEN_FINAL" NUMBER, CONSTRAINT "NOTAS_PK" PRIMARY KEY ("NOTA_ID"));
Luego de esto procederemos a armar nuestro procedimiento, el cual no recibe ningun para metro ya que no es necesario, la logica es la siguiente: realizaremos 2000 INSERT y para esto utilizaremos un LOOP, y ya en nuestro INSERT generaremos numeros aleatorios con dbms_random.value(0,10) que mantiene valores entre 0 y 10, esta funcion puede devolver tanto numeros positivos como negarivos por es le haremos un ABS que obtiene el valor absoluto, y adicional haremos un TRUNC para que solo devuelva dos decimales.
/**CREACION DE PROCEDIMIENTO**/ CREATE OR REPLACE PROCEDURE INSERTA_NOTAS AS BEGIN FOR i IN 1..2000 LOOP INSERT INTO NOTAS (NOTA_ID, PRIMER_PARCIAL, SEGUNDO_PARCIAL, EXAMEN_FINAL) SELECT (SELECT NVL(MAX(NOTA_ID),0)+1 FROM NOTAS), trunc(ABS(dbms_random.value(0,10)),2), trunc(ABS(dbms_random.value(0,10)),2), trunc(ABS(dbms_random.value(0,10)),2) FROM dual; END LOOP; COMMIT; END INSERTA_NOTAS;
Y al final solo mandamos a llamar nuestro procedimiento:
/**LLAMADA DEL PROCEDIMIENTO**/ BEGIN INSERTA_NOTAS(); END;