Bloques anónimos PL/SQL
Todo bloque debe acabar en . para que sea almacenado en el buffer SQL. Una vez guardado lo podemos ejecutar con la orden “run”.
Para cargar y ejecutar este bloque anónimo guardado en fichero ejecutaremos la siguiente orden:
start nombrefichero
Pero también podemos cargarlo sin ejecutarlo con la orden “get” y luego ejecutarlo posteriormente con la orden “run”
Un ejemplo muy sencillo de bloque seria el que nos muestra en pantalla un nombre.
BEGIN
DBMS_OUTPUT.PUT_LINE('nombre');
END;
.
DBMS_OUTPUT.PUT_LINE('nombre');
END;
.
Además en los bloques PL/SQL se pueden utilizar lo que llamamos variables de sustitución, que nos pedirán datos por pantalla antes de ejecutar el bloque. Estas variables tienen que ir antepuestas del & para que funcionen.
Un ejemplo sería un bloque que nos pide el DNI de un usuario y nos muestra su nombre.
DECLARE
Vnom clientes.nombre%TYPE;
BEGIN
select nombre into Vnom from clientes where NIF= '&V_nif';
DBMS_OUTPUT.PUT_LINE (Vnom);
END;
.
Vnom clientes.nombre%TYPE;
BEGIN
select nombre into Vnom from clientes where NIF= '&V_nif';
DBMS_OUTPUT.PUT_LINE (Vnom);
END;
.
Procedimientos y funciones PL/SQL
Los procedimientos y funciones quedan almacenados en la base de datos a diferencia de los bloques anónimos que se almacenaban en el buffer.
Otra cosa que nos diferencia los bloques anónimos de los procedimientos o funciones es que en los procedimientos o funciones no se pueden utilizar variables de sustitución.
En cuanto a su construcción es dada al principio la siguiente secuencia “CREATE OR REPLACE” para crearlo, o modificarlo si ya existe.
Pasamos a escribir un procedimiento que nos muestre los datos de un usuario:
CREATE OR REPLACE PROCEDURE ver_usuario(nomusu VARCHAR2)
IS
NIFusu VARCHAR2(10);
Domusu VARCHAR2(10);
BEGIN
select nif, domicilio into NIFusu,Domusu from usuario where nombre=nomusu;
DBMS_OUTPUT.PUT_LINE('Nombre:'||nomusu|| 'NIF:' ||NIFusu|| 'Domicilio' ||Domusu);
EXCEPTION
WHEN NO_DATA_FOUND THEN
DBMS_OUTPUT.PUT_LINE('No hemos encontrado al usuario || nomusu);
END;
/
IS
NIFusu VARCHAR2(10);
Domusu VARCHAR2(10);
BEGIN
select nif, domicilio into NIFusu,Domusu from usuario where nombre=nomusu;
DBMS_OUTPUT.PUT_LINE('Nombre:'||nomusu|| 'NIF:' ||NIFusu|| 'Domicilio' ||Domusu);
EXCEPTION
WHEN NO_DATA_FOUND THEN
DBMS_OUTPUT.PUT_LINE('No hemos encontrado al usuario || nomusu);
END;
/
Si el compilador detecta errores nos saldrá un mensaje como este: “Procedimiento creado con errores de compilación”.
Al tener almacenado el procedimiento en la base de datos, este puede ser llamado por cualquier usuario que tenga los permisos oportunos. Para invocar un procedimiento utilizamos la orden EXECUTE
Para invocar al procedimiento que hemos creado antes tendríamos que ejecutar la siguiente orden:
EXECUTE ver_usuario('Luis');
Funcion
Funcion
Una función es un subprograma que devuelve un valor
El uso de OR REPLACE permite sobreescribir una función existente. Si se omite,y la función existe, se producirá, un error.La sintaxis de los parámetros es la misma que en los procedimientosalmacenado, exceptuando que solo pueden ser de entrada.
No hay comentarios:
Publicar un comentario