En este tutorial, doy 4 ejemplos de bloques anónimos PL/SQL, para que pueda aprender cómo crear y usar bloques anónimos en la base de datos Oracle. Los bloques anónimos en PL/SQL son los programas que no tienen ningún procedimiento de creación o declaración de función de creación, y no se guardan en la base de datos de Oracle. Los bloques anónimos PL/SQL se utilizan principalmente para realizar pruebas o para ejecutar el programa en la base de datos Oracle solo una vez.
1. Bloque anónimo PL/SQL para imprimir números en orden inverso
El siguiente programa PL/SQL imprimirá los números del 0 al 10 en orden inverso, utilizando la cláusula REVERSE en el bucle for.
SET SERVEROUTPUT ON;
DECLARE
counter NUMBER;
BEGIN
FOR counter IN REVERSE 0..10 LOOP
DBMS_OUTPUT.PUT_LINE (counter);
END LOOP;
END;
/ Salida
10 9 8 7 6 5 4 3 2 1 0 PL/SQL procedure successfully completed.
2. Imprimir recuento de empleados en un departamento
El siguiente programa PL/SQL contará los empleados del departamento 90. La tabla es del esquema de recursos humanos de la base de datos de Oracle. Puede descargar este esquema desde el siguiente enlace Descargar esquema de recursos humanos.
SET SERVEROUTPUT ON;
DECLARE
emp_count NUMBER;
v_department_id NUMBER := 90;
BEGIN
SELECT COUNT ( * )
INTO emp_count
FROM employees
WHERE department_id = v_department_id;
DBMS_OUTPUT.PUT_LINE( 'The employee count is: '
|| emp_count
|| ' for the department with an ID of: '
|| v_department_id);
END;
/ Salida
The employee count is: 3 for the department with an ID of: 90 PL/SQL procedure successfully completed.
3. Tomar entrada en bloque anónimo PL/SQL e imprimir
En el siguiente ejemplo, solicitará la entrada del usuario para la identificación del departamento e imprimirá el recuento de empleados en ese departamento, y también imprimirá el nombre del departamento.
SET SERVEROUTPUT ON;
DECLARE
dept_id_var NUMBER (4) := &department_id;
dept_name VARCHAR2 (30);
emp_count NUMBER;
BEGIN
SELECT COUNT ( * )
INTO emp_count
FROM employees
WHERE department_id = dept_id_var;
SELECT department_name
INTO dept_name
FROM departments
WHERE department_id = dept_id_var;
DBMS_OUTPUT.PUT_LINE( 'There are '
|| emp_count
|| ' employees '
|| 'in the '
|| dept_name
|| ' department.');
END;
/ Salida
Enter value for department_id: 60 old 2: dept_id_var NUMBER(4) := &department_id; new 2: dept_id_var NUMBER(4) := 60; There are 4 employees in the IT department. PL/SQL procedure successfully completed.
4. Bloque PL/SQL con <> Ejemplo
El siguiente bloque PL/SQL utiliza las etiquetas para el bloque principal y el secundario. El bloque secundario accederá a la variable del bloque principal utilizando la referencia de etiqueta del bloque principal. El programa actualizará la identificación del administrador anterior con la nueva identificación del administrador para los departamentos.
SET SERVEROUTPUT ON;
<<outer_block>>
DECLARE
mgr_id NUMBER (6) := '¤t_manager_id';
dept_count NUMBER := 0;
BEGIN
SELECT COUNT ( * )
INTO dept_count
FROM departments
WHERE manager_id = outer_block.mgr_id;
IF dept_count > 0
THEN
<<inner_block>>
DECLARE
dept_name VARCHAR2 (30);
mgr_id NUMBER (6) := '&new_manager_id';
BEGIN
SELECT department_name
INTO dept_name
FROM departments
WHERE manager_id = outer_block.mgr_id;
UPDATE departments
SET manager_id = inner_block.mgr_id
WHERE manager_id = outer_block.mgr_id;
DBMS_OUTPUT.PUT_LINE (
'Department manager ID has been changed for ' || dept_name);
END inner_block;
ELSE
DBMS_OUTPUT.PUT_LINE (
'There are no departments listed for the manager');
END IF;
EXCEPTION
WHEN NO_DATA_FOUND
THEN
DBMS_OUTPUT.PUT_LINE (
'There are no departments listed for the manager');
END outer_block;
/ Salida
Enter value for current_manager_id: 100 old 3: mgr_id NUMBER (6) := '¤t_manager_id'; new 3: mgr_id NUMBER (6) := '100'; Enter value for new_manager_id: 201 old 16: mgr_id NUMBER (6) := '&new_manager_id'; new 16: mgr_id NUMBER (6) := '201'; Department manager ID has been changed for Executive PL/SQL procedure successfully completed.