Apa itu Package di Oracle?
Paket PL / SQL adalah pengelompokan logis dari subprogram terkait (prosedur / fungsi) menjadi satu elemen. Paket dikompilasi dan disimpan sebagai objek database yang dapat digunakan nanti.
Dalam tutorial ini, Anda akan belajar-
- Komponen Paket
- Spesifikasi Paket
- Isi Paket
- Mengacu Elemen Paket
- Buat Paket di PL / SQL
- Deklarasi Teruskan
- Penggunaan Kursor dalam Paket
- Kelebihan beban
- Ketergantungan pada Paket
- Informasi Paket
- UTL FILE - Gambaran Umum
Komponen Paket
Paket PL / SQL memiliki dua komponen.
- Spesifikasi Paket
- Isi Paket
Spesifikasi Paket
Spesifikasi paket terdiri dari deklarasi semua variabel publik, kursor, objek, prosedur, fungsi, dan pengecualian.
Di bawah ini adalah beberapa karakteristik spesifikasi Paket.
- Elemen yang semuanya dideklarasikan dalam spesifikasi dapat diakses dari luar paket. Unsur-unsur tersebut dikenal sebagai unsur publik.
- Spesifikasi paket adalah elemen mandiri yang berarti dapat ada sendiri tanpa badan paket.
- Kapanpun sebuah paket merujuk sebuah instance dari paket tersebut dibuat untuk sesi tersebut.
- Setelah instance dibuat untuk sebuah sesi, semua elemen paket yang dimulai dalam instance itu berlaku hingga akhir sesi.
Sintaksis
CREATE [OR REPLACE] PACKAGEIS … END
Sintaks di atas menunjukkan pembuatan spesifikasi paket.
Isi Paket
Ini terdiri dari definisi semua elemen yang ada dalam spesifikasi paket. Ia juga dapat memiliki definisi elemen yang tidak dideklarasikan dalam spesifikasi, elemen ini disebut elemen privat dan hanya dapat dipanggil dari dalam paket.
Di bawah ini adalah karakteristik badan paket.
- Ini harus berisi definisi untuk semua subprogram / kursor yang telah dideklarasikan dalam spesifikasi.
- Itu juga dapat memiliki lebih banyak subprogram atau elemen lain yang tidak dideklarasikan dalam spesifikasi. Ini disebut elemen privat.
- Ini adalah objek yang dapat diandalkan, dan bergantung pada spesifikasi paket.
- Status badan paket menjadi 'Tidak valid' setiap kali spesifikasi dikompilasi. Oleh karena itu, perlu dikompilasi ulang setiap kali setelah spesifikasi kompilasi.
- Elemen privat harus ditentukan terlebih dahulu sebelum digunakan di badan paket.
- Bagian pertama dari paket tersebut adalah bagian deklarasi global. Ini termasuk variabel, kursor dan elemen pribadi (deklarasi maju) yang terlihat oleh seluruh paket.
- Bagian terakhir dari paket adalah bagian Inisialisasi paket yang dijalankan satu kali setiap kali paket dirujuk pertama kali dalam sesi.
Sintaksis:
CREATE [OR REPLACE] PACKAGE BODYIS . END
- Sintaks di atas menunjukkan pembuatan badan paket.
Sekarang kita akan melihat bagaimana mereferensikan elemen paket dalam program.
Mengacu Elemen Paket
Setelah elemen dideklarasikan dan didefinisikan dalam paket, kita perlu merujuk elemen untuk menggunakannya.
Semua elemen publik dari paket dapat dirujuk dengan memanggil nama paket diikuti dengan nama elemen yang dipisahkan oleh titik yaitu '
Variabel publik dari paket juga dapat digunakan dengan cara yang sama untuk menetapkan dan mengambil nilai darinya yaitu '
Buat Paket di PL / SQL
Dalam PL / SQL setiap kali sebuah paket dirujuk / dipanggil dalam sesi, instance baru akan dibuat untuk paket itu.
Oracle menyediakan fasilitas untuk menginisialisasi elemen paket atau untuk melakukan aktivitas apa pun pada saat pembuatan instance ini melalui 'Inisialisasi Paket'.
Ini tidak lain adalah blok eksekusi yang ditulis dalam badan paket setelah mendefinisikan semua elemen paket. Blok ini akan dieksekusi setiap kali sebuah paket dirujuk untuk pertama kali dalam sesi tersebut.
Sintaksis
CREATE [OR REPLACE] PACKAGE BODYIS .BEGINE END
- Sintaks di atas menunjukkan definisi inisialisasi paket di badan paket.
Deklarasi Teruskan
Meneruskan deklarasi / referensi dalam paket tidak lain adalah mendeklarasikan elemen privat secara terpisah dan mendefinisikannya di bagian selanjutnya dari badan paket.
Elemen privat hanya bisa dirujuk jika sudah dideklarasikan di badan paket. Untuk alasan ini, deklarasi maju digunakan. Tetapi ini agak tidak biasa untuk digunakan karena di sebagian besar waktu elemen privat dideklarasikan dan ditentukan di bagian pertama dari badan paket.
Deklarasi maju adalah opsi yang disediakan oleh Oracle, itu tidak wajib dan menggunakan dan tidak menggunakan terserah kebutuhan programmer.
Sintaksis:
CREATE [OR REPLACE] PACKAGE BODYIS … … .BEGIN ;END
Sintaks di atas menunjukkan deklarasi maju. Elemen privat dideklarasikan secara terpisah di bagian depan paket, dan telah ditentukan di bagian selanjutnya.
Penggunaan Kursor dalam Paket
Tidak seperti Elemen lainnya, seseorang harus berhati-hati dalam menggunakan kursor di dalam paket.
Jika kursor ditentukan dalam spesifikasi paket atau di bagian global dari badan paket, maka kursor setelah dibuka akan tetap ada hingga akhir sesi.
Jadi seseorang harus selalu menggunakan atribut kursor '% ISOPEN' untuk memverifikasi status kursor sebelum merujuknya.
Kelebihan beban
Overloading adalah konsep memiliki banyak subprogram dengan nama yang sama. Subprogram ini akan dibedakan satu sama lain dengan sejumlah parameter atau tipe parameter atau tipe kembali yaitu subprogram dengan nama yang sama tetapi dengan jumlah parameter yang berbeda, tipe parameter yang berbeda atau tipe ulang yang berbeda dianggap sebagai kelebihan beban.
Ini berguna ketika banyak subprogram perlu melakukan tugas yang sama, tetapi cara memanggilnya masing-masing harus berbeda. Dalam hal ini, nama subprogram akan tetap sama untuk semua dan parameter akan diubah sesuai pernyataan panggilan.
Contoh 1 : Dalam contoh ini, kita akan membuat paket untuk mendapatkan dan mengatur nilai informasi karyawan di tabel 'emp'. Fungsi get_record akan mengembalikan output tipe rekaman untuk nomor karyawan yang diberikan, dan prosedur set_record akan memasukkan rekaman tipe rekaman ke dalam tabel emp.
Langkah 1) Pembuatan Spesifikasi Paket
CREATE OR REPLACE PACKAGE guru99_get_setISPROCEDURE set_record (p_emp_rec IN emp%ROWTYPE);FUNCTION get record (p_emp no IN NUMBER) RETURN emp%ROWTYPE;END guru99_get_set:/
Keluaran:
Package created
Penjelasan Kode
- Baris kode 1-5 : Membuat spesifikasi paket untuk guru99_get_set dengan satu prosedur dan satu fungsi. Keduanya sekarang menjadi elemen publik dari paket ini.
Langkah 2) Paket berisi isi Paket, di mana semua prosedur dan fungsi definisi sebenarnya akan ditentukan. Pada langkah ini, Isi Paket dibuat.
CREATE OR REPLACE PACKAGE BODY guru99_get_setIS PROCEDURE set_record(p_emp_rec IN emp%ROWTYPE)ISPRAGMA AUTONOMOUS_TRANSACTION;BEGININSERT INTO empVALUES(p_emp_rec.emp_name,p_emp_rec.emp_no; p_emp_rec.salary,p_emp_rec.manager);COMMIT;END set_record;FUNCTION get_record(p_emp_no IN NUMBER)RETURN emp%ROWTYPEISl_emp_rec emp%ROWTYPE;BEGINSELECT * INTO l_emp_rec FROM emp where emp_no=p_emp_noRETURN l_emp_rec;END get_record;BEGUN dbms_output.put_line(‘Control is now executing the package initialization part');END guru99_get_set:/
Keluaran:
Package body created
Penjelasan Kode
- Baris kode 7 : Membuat badan paket.
- Baris kode 9-16 : Mendefinisikan elemen 'set_record' yang dideklarasikan dalam spesifikasi. Ini sama dengan mendefinisikan prosedur mandiri di PL / SQL.
- Baris kode 17-24: Mendefinisikan elemen 'get_record'. Ini sama dengan mendefinisikan fungsi mandiri.
- Baris kode 25-26: Menentukan bagian inisialisasi paket.
Langkah 3) Membuat blok anonim untuk memasukkan dan menampilkan catatan dengan mengacu pada paket yang dibuat di atas.
DECLAREl_emp_rec emp%ROWTYPE;l_get_rec emp%ROWTYPE;BEGINdbms output.put line(‘Insert new record for employee 1004');l_emp_rec.emp_no:=l004;l_emp_rec.emp_name:='CCC';l_emp_rec.salary~20000;l_emp_rec.manager:=’BBB’;guru99_get_set.set_record(1_emp_rec);dbms_output.put_line(‘Record inserted');dbms output.put line(‘Calling get function to display the inserted record'):l_get_rec:=guru99_get_set.get_record(1004);dbms_output.put_line(‘Employee name: ‘||l_get_rec.emp_name);dbms_output.put_line(‘Employee number:‘||l_get_rec.emp_no);dbms_output.put_line(‘Employee salary:‘||l_get_rec.salary');dbms output.put line(‘Employee manager:‘||1_get_rec.manager);END:/
Keluaran:
Insert new record for employee 1004Control is now executing the package initialization partRecord insertedCalling get function to display the inserted recordEmployee name: CCCEmployee number: 1004Employee salary: 20000Employee manager: BBB
Penjelasan Kode:
- Baris kode 34-37: Mengisi data untuk variabel tipe rekaman dalam blok anonim untuk memanggil elemen 'set_record' dari paket.
- Baris kode 38: Panggilan telah dilakukan ke 'set_record' dari paket guru99_get_set. Sekarang paket tersebut dibuat dan itu akan bertahan hingga akhir sesi.
- Bagian inisialisasi paket dijalankan karena ini adalah panggilan pertama ke paket.
- Rekaman dimasukkan oleh elemen 'set_record' ke dalam tabel.
- Baris kode 41: Memanggil elemen 'get_record' untuk menampilkan detail karyawan yang dimasukkan.
- Paket dirujuk untuk kedua kalinya selama panggilan 'get_record' ke paket. Tetapi bagian inisialisasi tidak dijalankan kali ini karena paket sudah diinisialisasi dalam sesi ini.
- Baris kode 42-45: Mencetak detail karyawan.
Ketergantungan pada Paket
Karena paket adalah pengelompokan logis dari hal-hal terkait, ia memiliki beberapa dependensi. Berikut adalah ketergantungan yang harus dijaga.
- Spesifikasi adalah objek mandiri.
- Badan Paket bergantung pada spesifikasi.
- Badan paket dapat dikompilasi secara terpisah. Kapanpun spesifikasi dikompilasi, body perlu dikompilasi ulang karena akan menjadi tidak valid.
- Subprogram dalam badan paket yang bergantung pada elemen privat harus ditentukan hanya setelah deklarasi elemen privat.
- Objek database yang dirujuk dalam spesifikasi dan isi harus berstatus valid pada saat kompilasi paket.
Informasi Paket
Setelah informasi paket dibuat, informasi paket seperti sumber paket, detail subprogram, dan detail kelebihan beban tersedia di tabel definisi data Oracle.
Tabel di bawah ini memberikan tabel definisi data dan informasi paket yang tersedia dalam tabel.
Nama Tabel | Deskripsi | Pertanyaan |
ALL_OBYECT | Memberikan detail dari paket seperti object_id, creation_date, last_ddl_time, dll. Ini akan berisi objek yang dibuat oleh semua pengguna. | PILIH * DARI all_objects dimana object_name = '
|
USER_OBJECT | Memberikan detail dari paket seperti object_id, creation_date, last_ddl_time, dll. Ini akan berisi objek yang dibuat oleh pengguna saat ini. | PILIH * DARI user_objects dimana object_name = '
|
ALL_SOURCE | Memberikan sumber objek yang dibuat oleh semua pengguna. | PILIH * DARI all_source dimana name = '
|
USER_SOURCE | Memberikan sumber objek yang dibuat oleh pengguna saat ini. | PILIH * FROM user_source dimana name = '
|
ALL_PROCEDURES | Memberikan detail subprogram seperti object_id, detail overload, dll yang dibuat oleh semua pengguna. | PILIH * DARI all_procedures Dimana object_name = '
|
USER_PROCEDURES | Memberikan detail subprogram seperti object_id, detail kelebihan beban, dll. Yang dibuat oleh pengguna saat ini. | PILIH * FROM user_procedures Dimana object_name = '
|
UTL FILE - Gambaran Umum
File UTL adalah paket utilitas terpisah yang disediakan oleh Oracle untuk melakukan tugas-tugas khusus. Ini terutama digunakan untuk membaca dan menulis file sistem operasi dari paket atau subprogram PL / SQL. Ia mendapat fungsi terpisah untuk meletakkan informasi dan mendapatkan informasi dari file. Ini juga memungkinkan untuk membaca / menulis dalam kumpulan karakter asli.
Programmer dapat menggunakan ini untuk menulis file sistem operasi jenis apapun dan file tersebut akan ditulis langsung ke server database. Nama dan jalur direktori akan disebutkan pada saat penulisan.
Ringkasan
Kami sekarang telah mempelajari paket-paket dalam PL / SQL, dan Anda sekarang dapat mengerjakan yang berikut ini.
- Paket PL / SQL dan Komponennya
- Karakteristik paket
- Merujuk dan membebani elemen paket
- Mengelola ketergantungan dalam paket
- Melihat informasi paket
- Apa itu File UTL