В този урок давам 4 примера за PL/SQL анонимни блокове, за да можете да научите как да създавате и използвате анонимни блокове в базата данни на Oracle. Анонимните блокове в PL/SQL са програмите, които нямат израз за процедура за създаване или създаване на функция и не се записват в базата данни на Oracle. PL/SQL анонимни блокове, използвани предимно за тестване или за стартиране на програмата в базата данни на Oracle само еднократно.
1. PL/SQL анонимен блок за отпечатване на числа в обратен ред
Следната PL/SQL програма ще отпечата числата от 0 до 10 в обратен ред, като използва клауза REVERSE в цикъла for.
SET SERVEROUTPUT ON; DECLARE counter NUMBER; BEGIN FOR counter IN REVERSE 0..10 LOOP DBMS_OUTPUT.PUT_LINE (counter); END LOOP; END; /
Изход
10 9 8 7 6 5 4 3 2 1 0 PL/SQL procedure successfully completed.
2. Печатните служители се броят в отдел
Следната PL/SQL програма ще преброи служителите в отдел 90. Таблицата е от HR схемата на базата данни на Oracle. Можете да изтеглите тази схема от следната връзка Изтеглете HR схема.
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; /
Изход
The employee count is: 3 for the department with an ID of: 90 PL/SQL procedure successfully completed.
3. Вземете въвеждане в PL/SQL анонимен блок и отпечатайте
В примера по-долу той ще поиска въвеждането от потребителя за идентификатор на отдел и ще отпечата броя на служителите в този отдел, както и ще отпечата името на отдела.
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; /
Изход
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. PL/SQL блок с <<Етикети>> Пример
Следният PL/SQL блок използва етикетите за родителски и дъщерен блок. Дъщерният блок ще има достъп до променливата на родителския блок, като използва препратката към етикета на родителския блок. Програмата ще актуализира стария идентификатор на мениджър с нов идентификатор на мениджър за отделите.
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; /
Изход
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.