In deze tutorial geef ik 4 voorbeelden van anonieme PL/SQL-blokken, zodat je kunt leren hoe je anonieme blokken in de Oracle-database kunt maken en gebruiken. Anonieme blokken in PL/SQL zijn de programma's die geen Create Procedure of Create Function-statement hebben, en het slaat niet op in de Oracle-database. Anonieme PL/SQL-blokken die meestal worden gebruikt voor testen of om het programma eenmalig in de Oracle-database uit te voeren.
1. Anoniem PL/SQL-blok om nummers in omgekeerde volgorde af te drukken
Het volgende PL/SQL-programma drukt de getallen 0 tot 10 in omgekeerde volgorde af, met behulp van de REVERSE-clausule in de for-lus.
SET SERVEROUTPUT ON; DECLARE counter NUMBER; BEGIN FOR counter IN REVERSE 0..10 LOOP DBMS_OUTPUT.PUT_LINE (counter); END LOOP; END; /
Uitvoer
10 9 8 7 6 5 4 3 2 1 0 PL/SQL procedure successfully completed.
2. Afdrukken Werknemers tellen in een afdeling
Het volgende PL/SQL-programma telt de medewerkers in afdeling 90. De tabel komt uit het HR-schema van de Oracle-database. U kunt dit schema downloaden via de volgende link HR-schema downloaden.
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; /
Uitvoer
The employee count is: 3 for the department with an ID of: 90 PL/SQL procedure successfully completed.
3. Invoer opnemen in PL/SQL Anoniem blokkeren en afdrukken
In het onderstaande voorbeeld vraagt het de gebruiker om de afdelings-ID en drukt het het aantal medewerkers in die afdeling af, en ook de afdelingsnaam.
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; /
Uitvoer
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-blok met <> Voorbeeld
Het volgende PL/SQL-blok gebruikt de labels voor het bovenliggende en onderliggende blok. Het onderliggende blok heeft toegang tot de variabele van het bovenliggende blok door de labelreferentie van het bovenliggende blok te gebruiken. Het programma werkt de oude manager-ID bij met de nieuwe manager-ID voor de afdelingen.
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; /
Uitvoer
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.