Oracle Jenis Catatan PL/SQL dengan Contoh
โก Ringkasan Cerdas
Tipe data Record PL/SQL adalah tipe data kompleks yang mengelompokkan beberapa kolom, masing-masing dengan nama dan tipe datanya sendiri, menjadi satu tipe baru. Sebuah record dapat didefinisikan pada tingkat basis data sebagai objek tersimpan atau di dalam subprogram, dan field-fieldnya diakses dengan operator titik.

Apa itu Tipe Rekaman?
Tipe data record adalah tipe data kompleks yang memungkinkan programmer untuk membuat tipe data baru dengan struktur kolom yang diinginkan. Karakteristik utamanya adalah:
- Fungsi ini mengelompokkan satu atau lebih kolom untuk membentuk tipe data baru.
- Masing-masing kolom ini memiliki nama dan tipe data tersendiri.
- Tipe data record dapat menerima data sebagai satu record tunggal yang terdiri dari banyak kolom, atau dapat menerima nilai untuk satu kolom tertentu dari sebuah record.
- Tipe data record hanyalah tipe data baru. Setelah dibuat, tipe data ini disimpan sebagai tipe data baru dan dapat digunakan untuk mendeklarasikan variabel dalam program.
- Ini menggunakan kata kunci 'JENIS' untuk memberi tahu kompiler bahwa tipe data baru sedang dibuat.
- Hal itu dapat dibuat di tingkat basis data, disimpan sebagai objek basis data dan digunakan di seluruh basis data, atau pada tingkat subprogram, hanya terlihat di dalam subprogram.
- Tipe data record tingkat database juga dapat dideklarasikan untuk kolom tabel, sehingga satu kolom dapat menyimpan data yang kompleks.
- Data diakses dengan merujuk pada nama variabel, kemudian operator titik (.), lalu nama kolom, seperti ' . '.
Sintaks untuk Mendeklarasikan Tipe Record
Sintaks deklarasi pada level database:
CREATE TYPE <type_name_db> IS RECORD ( <column 1> <datatype>, );
Pada sintaks pertama, kata kunci 'CREATE TYPE' menginstruksikan kompiler untuk membuat tipe record bernama โtype_name_dbโ dengan kolom yang ditentukan sebagai objek basis data. Ini diberikan sebagai pernyataan individual, bukan di dalam blok apa pun.
Sintaks untuk deklarasi pada tingkat subprogram:
DECLARE TYPE <type_name> IS RECORD ( <column1> <datatype>, ); BEGIN <execution_section>; END;
Dalam sintaks ini, kita membuat tipe record bernama โtype_nameโ hanya di dalam subprogram. Pada kedua metode tersebut, cara mendefinisikan kolom dan tipe data serupa.
Contoh 1: Tipe Rekaman sebagai Objek Basis Data
Dalam program ini, kita akan melihat cara membuat tipe data record sebagai objek basis data. Kita akan membuat tipe data record 'emp_det' dengan empat kolom. Kolom dan tipe datanya adalah:
- EMP_NO (NOMOR)
- EMP_NAME (VARCHAR2 (150))
- MANAJER (NOMOR)
- GAJI (JUMLAH)
CREATE TYPE emp_det IS OBJECT ( EMP_NO NUMBER, EMP_NAME VARCHAR2(150), MANAGER NUMBER, SALARY NUMBER ); /
Keluaran:
Type created
Code Penjelasan
- Kode di atas membuat tipe emp_det sebagai objek basis data.
- Tabel tersebut memiliki 4 kolom: emp_no, emp_name, manager, dan salary, sebagaimana telah didefinisikan.
- Sekarang 'emp_det' mirip dengan yang lainnya. tipe data (seperti NUMBER atau VARCHAR2) dan terlihat di seluruh basis data. Oleh karena itu, dapat digunakan di mana saja dalam basis data untuk mendeklarasikan variabel dengan tipe ini.
Contoh 2: Tingkat Subprogram, Akses Tingkat Kolom
Dalam contoh ini, kita akan melihat cara membuat tipe data record pada tingkat subprogram dan cara mengisi serta mengambil nilai darinya berdasarkan kolom. Kita membuat tipe data record 'emp_det' pada tingkat subprogram dan menggunakannya untuk mengisi dan menampilkan data.
DECLARE TYPE emp_det IS RECORD ( EMP_NO NUMBER, EMP_NAME VARCHAR2(150), MANAGER NUMBER, SALARY NUMBER ); guru99_emp_rec emp_det; BEGIN guru99_emp_rec.emp_no:= 1001; guru99_emp_rec.emp_name:= 'XXX'; guru99_emp_rec.manager:= 1000; guru99_emp_rec.salary:= 10000; dbms_output.put_line('Employee Detail'); dbms_output.put_line ('Employee Number: '||guru99_emp_rec.emp_no); dbms_output.put_line ('Employee Name: '||guru99_emp_rec.emp_name); dbms_output.put_line ('Employee Salary: ' ||guru99_emp_rec.salary); dbms_output.put_line ('Employee Manager Number: '||guru99_emp_rec.manager); END; /
Keluaran:
Employee Detail Employee Number: 1001 Employee Name: XXX Employee Salary: 10000 Employee Manager Number: 1000
Code Penjelasan
- Code baris 2-8: Tipe data 'emp_det' dideklarasikan dengan kolom emp_no, emp_name, manager, dan salary dengan tipe data NUMBER, VARCHAR2, NUMBER, dan NUMBER.
- Code baris 9: Variabel guru99_emp_rec dideklarasikan sebagai tipe data 'emp_det'. Ini variabel dapat menyimpan nilai yang berisi keempat bidang tersebut.
- Code baris 11: Mengisi kolom 'emp_no' pada 'guru99_emp_rec' dengan nilai 1001.
- Code baris 12: Mengisi kolom 'emp_name' dengan nilai XXX.
- Code baris 13: Mengisi kolom 'manajer' dengan nilai 1000.
- Code baris 14: Mengisi kolom 'gaji' dengan nilai 10000.
- Code baris 15-19: Menampilkan nilai 'guru99_emp_rec' dalam output.
Contoh 3: Tingkat Subprogram, Akses Tingkat Baris
Dalam contoh ini, kita akan melihat cara membuat tipe data record pada tingkat subprogram dan mengisinya pada tingkat baris. Kita membuat tipe data record 'emp_det' pada tingkat subprogram dan menggunakannya untuk mengisi dan menampilkan data.
DECLARE TYPE emp_det IS RECORD ( EMP_NO NUMBER, EMP_NAME VARCHAR2(150), MANAGER NUMBER, SALARY NUMBER ); guru99_emp_rec emp_det; BEGIN INSERT INTO emp (emp_no, emp_name, salary, manager) VALUES (1002,'YYY',15000,1000); COMMIT; SELECT emp_no, emp_name, salary, manager INTO guru99_emp_rec FROM emp WHERE emp_no=1002; dbms_output.put_line ('Employee Detail'); dbms_output.put_line ('Employee Number: '||guru99_emp_rec.emp_no); dbms_output.put_line ('Employee Name: '||guru99_emp_rec.emp_name); dbms_output.put_line ('Employee Salary: '||guru99_emp_rec.salary); dbms_output.put_line ('Employee Manager Number: '||guru99_emp_rec.manager); END; /
Code Penjelasan
- Code baris 2-8: Tipe data 'emp_det' dideklarasikan dengan kolom emp_no, emp_name, manager, dan salary dengan tipe data NUMBER, VARCHAR2, NUMBER, dan NUMBER.
- Code baris 9: Variabel guru99_emp_rec dideklarasikan sebagai tipe data 'emp_det' dan dapat menampung keempat field tersebut.
- Code baris 11: Mengisi tabel emp dengan 1002 sebagai emp_no, YYY sebagai emp_name, 15000 sebagai salary, dan 1000 sebagai manager number.
- Code baris 12: Melakukan transaksi penyisipan.
- Code baris 13: Mengisi variabel 'guru99_emp_rec' pada tingkat baris dari kueri select untuk nomor karyawan 1002.
- Code baris 15-19: Menampilkan nilai 'guru99_emp_rec' dalam output.
Keluaran:
Employee Detail Employee Number: 1002 Employee Name: YYY Employee Salary: 1000 Employee Manager Number: 15000
Catatan: Tipe data record hanya dapat diakses pada level kolom saat mengalihkan nilainya ke mode output apa pun. Perhatikan bahwa dalam contoh ini urutan daftar SELECT tidak sesuai dengan urutan field record, itulah sebabnya nilai gaji dan manajer tampak tertukar dalam output.
Jenis-jenis Record PL/SQL
Di luar catatan yang ditentukan oleh programmer seperti yang ditunjukkan di atas, Oracle Menawarkan dua jenis record yang ditambatkan yang secara otomatis menyalin strukturnya. Menggunakannya menghindari deklarasi ulang kolom dan menjaga agar record tetap selaras dengan tabel atau kursor yang menjadi dasarnya.
| Jenis catatan | Dinyatakan dengan | Struktur berasal dari |
|---|---|---|
| Catatan berbasis tabel | nama_tabel%JENIS_BARIS | Semua kolom dalam sebuah tabel |
| Rekaman berbasis kursor | nama_kursor%JENIS_BARIS | Daftar pilihan kursor |
| Rekaman yang ditentukan oleh programmer | JENIS โฆ ADALAH REKAMAN | Kolom yang Anda daftarkan secara manual |
Record %ROWTYPE adalah pilihan teraman ketika bentuknya harus mengikuti tabel atau kursor, karena perubahan kolom akan terdeteksi secara otomatis pada kompilasi berikutnya.




