Dalam tutorial ini, saya memberikan 4 contoh blok anonim PL/SQL, sehingga Anda dapat mempelajari cara membuat dan menggunakan blok anonim di database Oracle. Blok anonim di PL/SQL adalah program yang tidak memiliki pernyataan Create Procedure atau Create Function, dan tidak disimpan dalam database Oracle. Blok anonim PL/SQL sebagian besar digunakan untuk menguji atau menjalankan program di database Oracle hanya untuk satu kali.
1. Blok Anonim PL/SQL Untuk Mencetak Angka dalam Urutan Terbalik
Program PL/SQL berikut akan mencetak angka 0 sampai 10 dalam urutan terbalik, menggunakan klausa REVERSE di for loop.
SET SERVEROUTPUT ON; DECLARE counter NUMBER; BEGIN FOR counter IN REVERSE 0..10 LOOP DBMS_OUTPUT.PUT_LINE (counter); END LOOP; END; /
Keluaran
10 9 8 7 6 5 4 3 2 1 0 PL/SQL procedure successfully completed.
2. Cetak Jumlah Karyawan di Departemen
Program PL/SQL berikut akan menghitung karyawan di departemen 90. Tabel ini berasal dari skema SDM database Oracle. Anda dapat mengunduh skema ini dari tautan berikut Unduh Skema 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; /
Keluaran
The employee count is: 3 for the department with an ID of: 90 PL/SQL procedure successfully completed.
3. Ambil Input di Blok Anonim PL/SQL dan Cetak
Pada contoh di bawah ini, ia akan meminta input dari pengguna untuk id departemen dan akan mencetak jumlah karyawan di departemen itu, dan juga akan mencetak nama departemen.
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; /
Keluaran
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. Blok PL/SQL Dengan <> Contoh
Blok PL/SQL berikut menggunakan label untuk blok induk dan anak. Blok anak akan mengakses variabel blok induk dengan menggunakan referensi label dari blok induk. Program akan memperbarui id manajer lama dengan id manajer baru untuk departemen.
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; /
Keluaran
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.