Un lenguaje de propsito general orientado a la inclusin de sentencias SQL o o Estructura del cdigo PL/SQL. Bloques: o DECLARE <variable,tipo> BEGIN sentencias PL/SQL END;
EJEMPLOS
Un ejemplo trivial: DECLARE parametro NUMBER(3):=123; BEGIN IF parametro=123 THEN DBMS OUTPUT.PUT(El valor es el ); DBMS OUTPUT.PUT LINE(parametro); ELSE DBMS OUTPUT.PUT LINE(Hay un error.); END IF; END;
El Lenguaje PL/SQL
Sentencia DECLARE: DECLARE numero NUMBER(3); fecha DATE; cadena VARCHAR2(3); columna codigo EMPLEADOS.CODIGO EMPLEADO%TYPE; registro empleados EMPLEADOS%ROWTYPE; BEGIN sentencias PL/SQL END;
Manejo de Tablas
SELECT ...INTO ...FROM ...WHERE ...; DECLARE codigo EMPLEADOS.CODIGO EMPLEADO%TYPE; nombre EMPLEADOS.NOMBRE%TYPE; primer apellido EMPLEADOS.APELLIDO1%TYPE; segundo apellido EMPLEADOS.APELLIDO2%TYPE; BEGIN codigo:=1; SELECT nombre, apellido1, apellido2 INTO FROM WHERE nombre, primer apellido, segundo apellido EMPLEADOS codigo empleado=codigo;
DBMS OUTPUT.PUT LINE(La tupla se ha leido); INSERT INTO LISTADO VALUES (codigo,nombre, primer apellido, segundo apellido); DBMS OUTPUT.PUT LINE(La tupla se ha insertado); END; 4
Sentencias de Control
Sentencia de Seleccin o IF condicion1 THEN ... ELSIF condicion 2 THEN ... ELSE condicion 3 ... END IF;
Sentencia LOOP: LOOP ... EXIT etiqueta WHEN condicion ; ... END LOOP;
Ejemplo Iteracion
DECLARE codigo EMPLEADOS.CODIGO EMPLEADO%TYPE; nombre EMPLEADOS.NOMBRE%TYPE; primer apellido EMPLEADOS.APELLIDO1%TYPE; segundo apellido EMPLEADOS.APELLIDO2%TYPE; maximo EMPLEADOS.CODIGO EMPLEADO%TYPE; BEGIN codigo:=1; SELECT Max(Codigo Empleado) INTO maximo FROM EMPLEADOS; FOR indice IN 1..maximo LOOP SELECT codigo empleado, nombre, apellido1, apellido2 INTO codigo, nombre, primer apellido, segundo apellido FROM EMPLEADOS WHERE codigo empleado=indice; INSERT INTO LISTADO VALUES (codigo, nombre, primer apellido, segundo apellido); DBMS OUTPUT.PUT LINE(La tupla se ha insertado); END LOOP; END; 6
Cursores
Mecanismo de SQL para el acceso a base de datos. Uso en SELECT. Declaracin del cursor: o DECLARE ... CURSOR nombre IS sentencia select; ... BEGIN ... END;
Operaciones: OPEN nombre cursor FETCH nombre cursor INTO lista variables CLOSE nombre cursor
Actualizacin de la tupla actual: o UPDATE tabla SET columna 1=expresin 1,...,columna n=expresin n o o WHERE CURRENT OF nombre cursor;
10
Ejemplo
DECLARE CURSOR busqueda salario IS SELECT codigo empleado, salario FROM EMPLEADOS FOR UPDATE OF salario; codigo empleados.codigo empleado%TYPE; salario empleados.salario empleado%TYPE; BEGIN OPEN busqueda salario; LOOP FETCH busqueda salario INTO codigo, salario; EXIT WHEN busqueda salario%NOTFOUND; IF salario < 100 THEN UPDATE empleados SET salario=salario*0,2 ; WHERE CURRENT OF busqueda salario ; END IF; END LOOP; CLOSE busqueda salario ; COMMIT; END;
11