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.