Procedimientos Oracle
walterin022Práctica o problema21 de Octubre de 2018
1.079 Palabras (5 Páginas)105 Visitas
CREATE OR REPLACE PROCEDURE LECTURA
IS
CURSOR TABLA_VIRTUAL IS
SELECT * FROM ESTUDIANTE;
ARREGLO TABLA_VIRTUAL%ROWTYPE;
BEGIN
OPEN TABLA_VIRTUAL;
FETCH TABLA_VIRTUAL INTO ARREGLO;
WHILE TABLA_VIRTUAL%FOUND
LOOP
DBMS_OUTPUT.PUT_LINE('NOMBRE:' || ARREGLO.NOMBRE ||' APELLIDO: ' || ARREGLO.APELLIDO);
FETCH TABLA_VIRTUAL INTO ARREGLO;
END LOOP;
CLOSE TABLA_VIRTUAL;
END;
CREATE OR REPLACE PROCEDURE CURSOR_FORLOOP
IS
CURSOR CR_LOOP
IS
SELECT * FROM CURSO;
V_RECEPTORA CR_LOOP%ROWTYPE;
BEGIN
FOR V_RECEPTORA IN CR_LOOP
LOOP
DBMS_OUTPUT.PUT_LINE(CR_LOOP%ROWCOUNT || '' || V_RECEPTORA.NOMBRE_CURSO);
END LOOP;
END;
/
CREATE OR REPLACE PROCEDURE PARAMETROS (V_AP IN VARCHAR)
AS
CURSOR CR_PARAMETRO(V_APELLIDO IN VARCHAR2)
IS
SELECT *
FROM ESTUDIANTE
WHERE APELLIDO=V_APELLIDO;
V_RECEPTORA CR_PARAMETRO%ROWTYPE;
BEGIN
FOR V_RECEPTORA IN CR_PARAMETRO(V_AP)
LOOP
DBMS_OUTPUT.PUT_LINE(V_RECEPTORA.NOMBRE);
END LOOP;
END;
/
SELECT CURSO.NUMERO_CURSO,NOMBRE_CURSO,CREDITOS
FROM CURSO,INSCRIPCION
WHERE CURSO.NUMERO_CURSO=INSCRIPCION.NUMERO_CURSO
AND INSCRIPCION.ID_ESTUDIANTE=V_ID;
SELECT NOMBRE, APELLIDO
FROM ESTUDIANTE
WHERE ESTUDIANTE.ID_ESTUDIANTE=V_ID;
_________________________________________________________________________________________________________
CREATE OR REPLACE PROCEDURE PARAMETROOS (V_ID IN VARCHAR)
AS
CURSOR CR_PARAMETRO(V_ID IN VARCHAR2)
IS
SELECT CURSO.NUMERO_CURSO,CURSO.NOMBRE_CURSO,CREDITOS
FROM CURSO,INSCRIPCION
WHERE CURSO.NUMERO_CURSO=INSCRIPCION.NUMERO_CURSO
AND INSCRIPCION.ID_ESTUDIANTE=V_ID;
V_RECEPTORA CR_PARAMETRO%ROWTYPE;
nom ESTUDIANTE.NOMBRE%type;
ape ESTUDIANTE.APELLIDO%type;
BEGIN
SELECT NOMBRE, APELLIDO INTO nom, ape
FROM ESTUDIANTE
WHERE ESTUDIANTE.ID_ESTUDIANTE=V_ID;
FOR V_RECEPTORA IN CR_PARAMETRO(V_ID)
LOOP
DBMS_OUTPUT.PUT_LINE('EL ALUMNO: ' || nom ||' ' || ape || ' ESTA INSCRITO EN LOS SIGUIENTES CURSOS: ' || V_RECEPTORA.NUMERO_CURSO ||' ' || V_RECEPTORA.NOMBRE_CURSO || V_RECEPTORA.CREDITOS);
END LOOP;
END;
/
CREATE OR REPLACE PROCEDURE PARAMETROOS (V_ID IN VARCHAR)
AS
CURSOR CR_PARAMETRO(V_ID IN VARCHAR2)
IS
SELECT CURSO.NUMERO_CURSO,CURSO.NOMBRE_CURSO,CREDITOS
FROM CURSO,INSCRIPCION
WHERE CURSO.NUMERO_CURSO=INSCRIPCION.NUMERO_CURSO
AND INSCRIPCION.ID_ESTUDIANTE=V_ID;
V_RECEPTORA CR_PARAMETRO%ROWTYPE;
nom ESTUDIANTE.NOMBRE%type;
ape ESTUDIANTE.APELLIDO%type;
BEGIN
SELECT NOMBRE, APELLIDO INTO nom, ape
FROM ESTUDIANTE
WHERE ESTUDIANTE.ID_ESTUDIANTE=V_ID;
DBMS_OUTPUT.PUT_LINE('EL ALUMNO: ' || nom ||' ' || ape );
DBMS_OUTPUT.PUT_LINE(' ESTA INSCRITO EN LOS SIGUIENTES CURSOS: ');
FOR V_RECEPTORA IN CR_PARAMETRO(V_ID)
LOOP
DBMS_OUTPUT.PUT_LINE(V_RECEPTORA.NUMERO_CURSO ||' ' || V_RECEPTORA.NOMBRE_CURSO || V_RECEPTORA.CREDITOS);
END LOOP;
END;
/
______________________________________________________________________________________________________________________________________
TRIGGERS
CREATE TABLE CLIENTES( CODIGO VARCHAR(2),NOMBE VARCHAR(15), LIMITE NUMBER (8,2));
CREATE OR REPLACE TRIGGER INSERCION
AFTER INSERT
ON CLIENTES
FOR EACH ROW
BEGIN
DBMS_OUTPUT.PUT_LINE('CLIENTE ADICIONADO');
END;
CREATE TABLE AUDITOR( REGISLONG VARCHAR(40));
CREATE OR REPLACE TRIGGER AUDITAR_CLIENTES
AFTER UPDATE
ON CLIENTES
FOR EACH ROW
BEGIN
INSERT INTO AUDITOR
VALUES('ANTERIOR' ||:OLD.LIMITE|| ' NUEVO' || :NEW.LIMITE);
END;
ALTER TABLE CLIENTES ADD FOREIGN KEY(ESTADO) REFERENCES ESTADOS(CODIGO);
CREATE OR REPLACE VIEW CLIENTES_ESTADOS
AS
SELECT CODIGO, NOMBRE, LIMITE, NOMBRE_E
FROM CLIENTES, ESTADOS
WHERE
CLIENTES.ESTADO=ESTADOS.CODIGO_E;
/
ALTER TABLE ESTADOS RENAME COLUMN CODIGO TO CODIGO_E;
__________________________________________________________________________________________________________________________________________
SQL> CREATE TABLE ARTICULOS (
2 CODIGO VARCHAR(5) PRIMARY KEY,DESCRIPCION VARCHAR (30),PRECIO NUMBER(5,2), CODIGO_ALMACEN VARCHAR(6));
Table created.
SQL> CREATE TABLE ARTICULOS_MAYOR(
2 CODIGO VARCHAR(5) PRIMARY KEY,DESCRIPCION VARCHAR (30),PRECIO NUMBER(5,2), CODIGO_ALMACEN VARCHAR(6));
Table created.
SQL> CREATE TABLE ARTICULOS_MENOR(
2 CODIGO VARCHAR(5) PRIMARY KEY,DESCRIPCION VARCHAR (30),PRECIO NUMBER(5,2), CODIGO_ALMACEN VARCHAR(6));
SQL> CREATE TABLE ALMACENES(
2 CODIGO_ALMACENES VARCHAR (6) PRIMARY KEY,
3 NOMBRE_ALMACENES VARCHAR (30));
Table created.
SQL> ALTER TABLE ARTICULOS ADD FOREIGN KEY(CODIGO_ALMACEN) REFERENCES ALMACENES(CODIGO_ALMACENES);
Table altered.
insert into articulos values ('00001','DESODORANTE EN AEROSOL', 40.00, 100001);
insert into articulos values ('00002','AGUA CIEL 600ml', 10.00, 100001);
insert into articulos values ('00003','PAPAS FRITAS', 11.00, 100001);
insert into ALMACENES values (100001,'PRODUCTO TERMINADO');
PROCEDIMIENTO PARA TABLAS MENOR Y MAYOR
_____________________________________________________________________________________________________________________________________________
CREATE OR REPLACE PROCEDURE PROCESO (V_PRE IN NUMBER)
AS
CURSOR CP_PARAMETRO
IS
SELECT *FROM ARTICULOS;
V_RECEPTORA CP_PARAMETRO%ROWTYPE;
MSG EXCEPTION;
BEGIN
FOR V_RECEPTORA IN CP_PARAMETRO
LOOP
IF V_RECEPTORA.PRECIO >=V_PRE THEN
INSERT INTO ARTICULOS_MAYOR VALUES (V_RECEPTORA.CODIGO,V_RECEPTORA.DESCRIPCION,V_RECEPTORA.PRECIO,V_RECEPTORA.CODIGO_ALMACEN);
ELSE
INSERT INTO ARTICULOS_MENOR VALUES (V_RECEPTORA.CODIGO,V_RECEPTORA.DESCRIPCION,V_RECEPTORA.PRECIO,V_RECEPTORA.CODIGO_ALMACEN);
END IF;
END LOOP;
RAISE MSG;
EXCEPTION
WHEN MSG THEN
DBMS_OUTPUT.PUT_LINE('FIN DEL PROCESO');
END;
/
______________________________________________________________________________________________________________________________________________
CREATE OR REPLACE TRIGGER CONDICION
AFTER INSERT
ON ARTICULOS_MAYOR
FOR EACH ROW
BEGIN
DBMS_OUTPUT.PUT_LINE('CUMPLE CONDICION');
END;
/
______________________________________________________________________________________________________________________________________________
CREATE VIEW
CREATE OR REPLACE VIEW DATES
AS
SELECT CODIGO, DESCRIPCION, PRECIO, NOMBRE_ALMACENES
FROM ARTICULOS, ALMACENES
WHERE
CODIGO_ALMACEN=CODIGO_ALMACENES;
/
_____________________________________________________________________________________________________________________________________________
DECLARE
TYPE ARREGLO_DE_NOMBRES IS VARRAY(5) OF VARCHAR2(10);
TYPE RESULTADO IS VARRAY(5) OF INTEGER;
NOMBRES ARREGLO_DE_NOMBRES;
CAL RESULTADO;
TOTAL INTEGER;
BEGIN
NOMBRES:=ARREGLO_DE_NOMBRES('CARLOS','ZITA','MIRIAM','NATALIA','JESSY');
CAL:= RESULTADO(10,9,8,7,6);
TOTAL:=NOMBRES.COUNT;
DBMS_OUTPUT.PUT_LINE('TOTAL'|| TOTAL ||' ALUMNOS');
DBMS_OUTPUT.PUT_LINE('ALUMNO CALIFICACION');
FOR I IN 1 .. TOTAL LOOP
DBMS_OUTPUT.PUT_LINE(NOMBRES(I) || '-------------->' || CAL(I));
END LOOP;
END;
/
___________________________________________________________________________________________________________________________________________
QUICKSORT ORACLE
CREATE OR REPLACE PROCEDURE BURBU
IS
TYPE LISTA IS VARRAY(20) OF INTEGER;
NUMEROS LISTA;
TEMP INTEGER;
TAM INTEGER;
BEGIN
NUMEROS:=LISTA(20,22,345,223,44,555,1,3,67,56,6,6765,344,9999,78,567,676,786,99,778);
...