Topik ini menjelaskan cara menggunakan %TYPE dalam deklarasi variabel.
Ikhtisar
Variabel dideklarasikan dalam program SPL untuk menyimpan nilai dari tabel di database. Untuk memastikan kompatibilitas antara kolom tabel dan variabel SPL, tipe data kolom dan variabel harus sama. Jika Anda mengubah tipe data kolom, Anda juga harus menyesuaikan tipe data variabel dalam program SPL yang sesuai. Anda dapat menggunakan atribut kolom %TYPE. Dengan pendekatan ini, tidak perlu secara eksplisit menentukan tipe data kolom tertentu sebagai bagian dari deklarasi variabel. Nama kolom yang memenuhi syarat dalam notasi titik atau nama variabel yang telah dideklarasikan sebelumnya harus ditentukan sebagai awalan %TYPE. Tipe data kolom atau variabel yang diawali dengan %TYPE akan diberikan kepada variabel yang dideklarasikan. Jika tipe data kolom atau variabel yang diberikan berubah, tipe data baru akan otomatis dikaitkan dengan variabel, sehingga menghilangkan kebutuhan untuk memodifikasi deklarasi.
Sintaksis
nama { { tabel | tampilan }.kolom | variabel }%TYPE;Parameter
| Bidang | Ikhtisar |
| nama | Parameter formal yang akan dideklarasikan, atau pengenal yang ditetapkan ke variabel. |
| kolom | Nama kolom dalam tabel atau dalam tampilan. |
| variabel | Nama variabel yang dideklarasikan sebelum variabel yang diidentifikasi oleh nama. |
:=.Contoh
Dalam prosedur tersimpan berikut, sistem meminta tabel emp menggunakan nomor karyawan, menghitung rata-rata gaji semua karyawan di departemen tempat karyawan tersebut bekerja, dan membandingkan gaji karyawan dengan rata-rata gaji departemen.
CREATE OR REPLACE PROCEDURE emp_sal_query (
p_empno IN NUMBER
)
IS
v_ename VARCHAR2(10);
v_job VARCHAR2(9);
v_hiredate DATE;
v_sal NUMBER(7,2);
v_deptno NUMBER(2);
v_avgsal NUMBER(7,2);
BEGIN
SELECT ename, job, hiredate, sal, deptno
INTO v_ename, v_job, v_hiredate, v_sal, v_deptno
FROM emp WHERE empno = p_empno;
DBMS_OUTPUT.PUT_LINE('Employee # : ' || p_empno);
DBMS_OUTPUT.PUT_LINE('Name : ' || v_ename);
DBMS_OUTPUT.PUT_LINE('Job : ' || v_job);
DBMS_OUTPUT.PUT_LINE('Hire Date : ' || v_hiredate);
DBMS_OUTPUT.PUT_LINE('Salary : ' || v_sal);
DBMS_OUTPUT.PUT_LINE('Dept # : ' || v_deptno);
SELECT AVG(sal) INTO v_avgsal
FROM emp WHERE deptno = v_deptno;
IF v_sal > v_avgsal THEN
DBMS_OUTPUT.PUT_LINE('Gaji karyawan lebih dari '
|| 'rata-rata departemen ' || v_avgsal);
ELSE
DBMS_OUTPUT.PUT_LINE('Gaji karyawan tidak melebihi '
|| 'rata-rata departemen ' || v_avgsal);
END IF;
END;Prosedur tersimpan sebelumnya juga dapat ditulis dalam mode lain, seperti yang ditunjukkan dalam blok kode berikut. Dengan cara ini, Anda tidak perlu secara eksplisit menentukan tipe data tabel emp di bagian deklarasi prosedur tersimpan.
CREATE OR REPLACE PROCEDURE emp_sal_query (
p_empno IN emp.empno%TYPE
)
IS
v_ename emp.ename%TYPE;
v_job emp.job%TYPE;
v_hiredate emp.hiredate%TYPE;
v_sal emp.sal%TYPE;
v_deptno emp.deptno%TYPE;
v_avgsal v_sal%TYPE;
BEGIN
SELECT ename, job, hiredate, sal, deptno
INTO v_ename, v_job, v_hiredate, v_sal, v_deptno
FROM emp WHERE empno = p_empno;
DBMS_OUTPUT.PUT_LINE('Employee # : ' || p_empno);
DBMS_OUTPUT.PUT_LINE('Name : ' || v_ename);
DBMS_OUTPUT.PUT_LINE('Job : ' || v_job);
DBMS_OUTPUT.PUT_LINE('Hire Date : ' || v_hiredate);
DBMS_OUTPUT.PUT_LINE('Salary : ' || v_sal);
DBMS_OUTPUT.PUT_LINE('Dept # : ' || v_deptno);
SELECT AVG(sal) INTO v_avgsal
FROM emp WHERE deptno = v_deptno;
IF v_sal > v_avgsal THEN
DBMS_OUTPUT.PUT_LINE('Gaji karyawan lebih dari '
|| 'rata-rata departemen ' || v_avgsal);
ELSE
DBMS_OUTPUT.PUT_LINE('Gaji karyawan tidak melebihi '
|| 'rata-rata departemen ' || v_avgsal);
END IF;
END;- p_empno adalah contoh parameter formal yang secara eksplisit didefinisikan menggunakan %TYPE.
- v_avgsal menunjukkan cara menggunakan %TYPE untuk mereferensikan variabel lain alih-alih kolom tabel.
Hasil sampel:
EXEC emp_sal_query(7698);
Employee # : 7698
Name : BLAKE
Job : MANAGER
Hire Date : 01-MAY-81 00:00:00
Salary : 2850.00
Dept # : 30
Gaji karyawan lebih dari rata-rata departemen 1566.67