Oracle Native Dynamic SQL (PL/SQL)
Oracle Native Dynamic SQL (PL/SQL)
Facultad de Ingeniería
Grupo: 7HW1
Fecha: 26/09/2018
~EJERCICIO #1
1. Crear una función almacenada que verifique la existencia de un registro. Se le pasa como
parámetro el nombre de la tabla y el atributo por el cual se hace la verificación. Regresa un
valor true si existe el registro .
DECLARE
BEGIN
IF EXISTREGVAL('REGIONS','REGION_NAME','Americas') THEN
ECH('Existe');
0
ELSE
ECH('No Existe');
END IF;
IF EXISTREG('REGIONS','LATITUDE') THEN
ECH('Existe');
ELSE
ECH('No Existe');
END IF;
END;
1
~EJERCICIO #2
TMP EMPLOYEES%ROWTYPE;
BEGIN
IF ORDERTYPE = 1 THEN
WRAPPERTYPE := 'ASC';
ELSIF ORDERTYPE = 2 THEN
WRAPPERTYPE := 'DESC';
END IF;
2
END LOOP;
EXCEPTION WHEN OTHERS THEN ECH(SQLERRM);
END;
BEGIN
SHOWEMPS_DPTO('SALARY', 1);
SHOWEMPS_DPTO('EMPLOYEE_ID', 2);
END;
3
~EJERCICIO #3
Crear un procedimiento almacenado que reciba como parámetro el nombre de una
tabla, y muestre la estructura de dicha tabla (atributos y tipos).
*FORM 1
CREATE OR REPLACE PROCEDURE SHOWSTRUCT(TN VARCHAR2) AS
ARR CVARRAY;
WIDTH INTEGER := 25;
BEGIN
BEGIN
SELECT COLUMN_NAME, DATA_TYPE BULK COLLECT INTO ARR FROM
ALL_TAB_COLUMNS WHERE TABLE_NAME = TN;
ARR(I).CNAME := RPAD(ARR(I).CNAME,WIDTH);
ARR(I).CTYPE := RPAD(ARR(I).CTYPE,WIDTH);
ECH('-> '||ARR(I).CNAME||' | -> '||ARR(I).CTYPE||'|');
END LOOP;
EXCEPTION WHEN OTHERS THEN NULL;
END;
END;
BEGIN
FOR X IN (SELECT TABLE_NAME A FROM USER_TABLES) LOOP
ECH('***** >>Tabla: '||X.A||'*****');
4
SHOWSTRUCT(X.A);
ECH(' ');
END LOOP;
END;
*FORM 2
CREATE OR REPLACE PROCEDURE SHOWSTRUCT2(TNAME VARCHAR2) AS
TMP ALL_TAB_COLUMNS%ROWTYPE;
BEGIN
ECH(TMP.COLUMN_NAME||' '||TMP.DATA_TYPE);
END LOOP;
EXCEPTION WHEN OTHERS THEN ECH(SQLERRM);
END;
BEGIN
SHOWSTRUCT2('EMPLOYEES');
END;
5
6
~EJERCICIO #4
Crear un procedimiento almacenado que permita agregar una columna a una
tabla, se pasa como parámetro el nombre de la tabla, nombre de la columna
nueva y el tipo de dato de dicha columna.
BEGIN
ADDCOLUMN('XTEST','APELLIDO','VARCHAR2(30)');
ADDCOLUMN('XTEST','ALIAS','VARCHAR2(30)');
ADDCOLUMN('XTEST','SALARIO','NUMBER(9,2)');
SHOWSTRUCT('XTEST');
DELCOLUMN('XTEST','APELLIDO');
DELCOLUMN('XTEST','ALIAS');
DELCOLUMN('XTEST','SALARIO');
SHOWSTRUCT('XTEST');
END;
7
8
~EJERCICIO #5
Crear un procedimiento almacenado que permita crear una copia de una tabla,
el procedimiento recibe como parámetro el nombre de la tabla a copiar y el
nombre de la nueva tabla.
BEGIN
DUPLICATE_TABLE('XTEST','XTEST2');
DUPLICATE_SCHEMA_TABLE('EMPLOYEES','NEWEMPS');
END;
9
10