Uso y ejemplo de bloques anónimos
Bloques anónimos
Los bloques
anónimos no tienen nombre.Se suelen crear y ejecutar desde SQL*Plus. Oracle
reconoce el comienzo del bloque cuando encuentra DECLARE o BEGIN.El bloque del
buffer se puede guardar en un fichero con la orden.
SQL>SAVE
nombrefichero [REPLACE].
Para cargar un
bloque de un fichero en el buffer SQL se hará:
SQL>GET
nombrefichero,una vez cargado se puede ejecutar con RUN
También se
puede cargar y ejecutar con una sola orden:
SQL>START
nombrefichero
Estos son
algunos ejemplos de bloques PL/SQL anónimos:
1.El siguiente
bloque no hace nada:

Script
SET SERVEROUTPUT ON
BEGIN
NULL;
END;
/
2.El siguiente
bloque escribe "HOLA MUNDO".

Script
BEGIN
DBMS_OUTPUT.PUT_LINE('HOLA MUNDO');
END;
/
3. El bloque
siguiente muestra la descripción de un articulo:

Script
DECLARE
v_descrip varchar(30);
BEGIN
SELECT descrip INTO v_descrip
FROM product
WHERE prodid=100860;
DBMS_OUTPUT.PUT_LINE(v_descrip);
END;
/
En los bloques se pueden utilizar variables de sustitución anteponiendo el & a la variable. Antes de ejecutar el bloque se solicitará el valor de la variable:
En los bloques se pueden utilizar variables de sustitución anteponiendo el & a la variable. Antes de ejecutar el bloque se solicitará el valor de la variable:

Script
DECLARE
v_nom CUSTOMER.NAME%TYPE;
BEGIN
SELECT name INTO v_nom
FROM customer
WHERE custid=&v_id;
DBMS_OUTPUT.PUT_LINE(v_nom);
END;
/
Uso de procedimientos
DECLARE
v_nom CUSTOMER.NAME%TYPE;
BEGIN
SELECT name INTO v_nom
FROM customer
WHERE custid=&v_id;
DBMS_OUTPUT.PUT_LINE(v_nom);
END;
/
Uso de procedimientos

El procedimiento se encuentra almacenado en el servidor de base
de datos y puede ser invocado mediante la orden EXECUTE
SET SERVEROUTPUT ON
EXECUTE ver_cliente('JOCKSPORT')
SET SERVEROUTPUT ON
EXECUTE ver_cliente('JOCKSPORT')

SCRIPT COMPLETO
CREATE OR REPLACE
PROCEDURE ver_cliente(nomcli VARCHAR2)
AS
idcli NUMBER(6);
domcli VARCHAR2(40);
BEGIN
SELECT custid,address INTO idcli,domcli
FROM customer
WHERE name=nomcli;
DBMS_OUTPUT.PUT_LINE('Nombre: '||nomcli||'Nif: '||idcli||'Domicilio: '||domcli);
EXCEPTION
WHEN NO_DATA_FOUND THEN
DBMS_OUTPUT.PUT_LINE('No se encontro cliente'||nomcli);
END ver_cliente;
CREATE OR REPLACE
PROCEDURE ver_cliente(nomcli VARCHAR2)
AS
idcli NUMBER(6);
domcli VARCHAR2(40);
BEGIN
SELECT custid,address INTO idcli,domcli
FROM customer
WHERE name=nomcli;
DBMS_OUTPUT.PUT_LINE('Nombre: '||nomcli||'Nif: '||idcli||'Domicilio: '||domcli);
EXCEPTION
WHEN NO_DATA_FOUND THEN
DBMS_OUTPUT.PUT_LINE('No se encontro cliente'||nomcli);
END ver_cliente;






