Anda di halaman 1dari 11

El Lenguaje PL/SQL

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;

Los cheros terminan con el caracter / Uso de SHOW ERRORS.

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;

Uso de SET SERVEROUTPUT ON.

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

Atributos de los Cursores


%NOTFOUND %FOUND %ROWCOUNT %ISOPEN Devuelve TRUE cuando falla el FETCH Contrario Devuelve el nmero de las tratadas ya con el FETCH u Devuelve TRUE cuando el cursor est abierto a

Procesamiento de los Cursores


DECLARE codigo EMPLEADOS.CODIGO EMPLEADO%TYPE; nombre EMPLEADOS.NOMBRE%TYPE; primer apellido EMPLEADOS.APELLIDO1%TYPE; segundo apellido EMPLEADOS.APELLIDO2%TYPE; CURSOR busqueda IS SELECT codigo empleado,nombre, apellido1, apellido2 FROM EMPLEADOS; BEGIN OPEN busqueda; LOOP FETCH busqueda INTO codigo, nombre, primer apellido, segundo apellido; EXIT WHEN busqueda%NOTFOUND; INSERT INTO LISTADO VALUES (codigo,nombre, primer apellido, segundo apellido); DBMS OUTPUT.PUT LINE(La tupla se ha insertado); END LOOP; CLOSE busqueda; COMMIT; END;

Cursores para Actualizacion


Los cursores que han de actualizar la tabla que recorren han de declararse de otra forma: DECLARE CURSOR nombre cursor IS expresin select o FOR UPDATE OF COLUMNS (columna 1,...,columna n);

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

Anda mungkin juga menyukai