Jika Anda seorang programmer, Anda mungkin akrab dengan konsep penanganan eksepsi yang merupakan bagian integral dari bahasa pemrograman apa pun. Karena kesalahan tidak dapat dihindari dan bahkan yang paling pintar pun dari kita dapat membuat kesalahan saat menulis kode, kita harus mengetahui cara menanganinya. Dalam artikel ini, kita akan mempelajari secara khusus tentang penanganan eksepsi di PL/SQL.
Berikut adalah topik yang dibahas dalam artikel ini :
- Apa itu Pengecualian?
- Sintaks Penanganan Pengecualian
- Jenis Pengecualian
- Sistem ditentukan
- Pengecualian sistem bernama
- Pengecualian sistem tanpa nama
- Ditentukan pengguna
- Langkah-langkah untuk mendeklarasikan fungsi yang ditentukan Pengguna
- Contoh fungsi yang ditentukan pengguna
- Sistem ditentukan
Apa itu Pengecualian?
Setiap kondisi atau kejadian tidak normal yang mengganggu aliran normal instruksi program kami pada saat dijalankan atau dengan kata sederhana, pengecualian adalah kesalahan.
Sintaks Penanganan Pengecualian di PL/SQL
DECLARE <declarations section> BEGIN <executable command(s)> EXCEPTION <exception handling goes here > WHEN exception1 THEN exception1-handling-statements WHEN exception2 THEN exception2-handling-statements WHEN exception3 THEN exception3-handling-statements ........ WHEN others THEN exception3-handling-statements END;
Di sini, kita dapat membuat daftar pengecualian sebanyak yang ingin kita tangani. Pengecualian default akan ditangani menggunakan 'WHEN others THEN'
Contoh Penanganan Exception di PL/SQL
Program di bawah ini menampilkan nama dan alamat siswa yang identitasnya diberikan. Karena tidak ada siswa dengan nilai ID 8 di database kami, program memunculkan pengecualian run-time NO_DATA_FOUND, yang ditangkap di blok EXCEPTION.
DECLARE s_id studentS.id%type := 8; s_name studentS.Name%type; s_loc studentS.loc%type; BEGIN SELECT name, loation INTO s_name, s_loc FROM students WHERE id = s_id; DBMS_OUTPUT.PUT_LINE ('Name: '|| s_name); DBMS_OUTPUT.PUT_LINE ('Location: ' || s_loc); EXCEPTION WHEN no_data_found THEN dbms_output.put_line('No such student!'); WHEN others THEN dbms_output.put_line('Oops, Error!'); END;
Keluaran
No such student! PL/SQL procedure successfully completed.
Di sini, kita dapat membuat daftar pengecualian sebanyak yang ingin kita tangani. Pengecualian default akan ditangani menggunakan 'KETIKA orang lain MAKA '
Jenis Pengecualian di PL/SQL
- Sistem ditentukan
- Pengguna menentang
Berikutnya dalam artikel tentang penanganan eksepsi di PL/SQL, mari kita bahas kedua tipe ini secara mendetail.
Sistem ditentukan
Didefinisikan dan dipelihara secara implisit oleh server Oracle, pengecualian ini terutama ditentukan dalam Paket Standar Oracle. Setiap kali pengecualian terjadi di dalam program, server Oracle mencocokkan dan mengidentifikasi pengecualian yang sesuai dari kumpulan pengecualian yang tersedia dalam paket standar oracle. Pada dasarnya, pengecualian ini telah ditentukan sebelumnya dalam PL/SQL yang dimunculkan KETIKA aturan database tertentu dilanggar .
Pengecualian yang ditentukan sistem dibagi lagi menjadi dua kategori:
- Pengecualian sistem bernama
- Pengecualian sistem tanpa nama
Pengecualian sistem bernama
Pengecualian PL/SQL bernama dinamai dalam paket standar PL/SQL , maka pengembang tidak perlu mendefinisikan pengecualian PL/SQL dalam kode mereka. PL/SQL menyediakan banyak pengecualian bernama yang telah ditentukan sebelumnya, yang dieksekusi ketika ada aturan database yang dilanggar oleh suatu program. Tabel berikut mencantumkan beberapa pengecualian penting yang telah ditentukan sebelumnya
Pengecualian | Kesalahan Oracle | SQLCODE | Deskripsi |
ACCESS_INTO_NULL | 06530 | -6530 | Ini dimunculkan ketika objek null secara otomatis diberi nilai. |
CASE_NOT_FOUND | 06592 | -6592 | Ini dimunculkan ketika tidak ada pilihan dalam klausa WHEN dari pernyataan CASE yang dipilih, dan tidak ada klausa ELSE. |
COLLECTION_IS_NULL | 06531 | -6531 | Ini dimunculkan ketika sebuah program mencoba untuk menerapkan metode pengumpulan selain EXISTS ke tabel atau varray bersarang yang tidak diinisialisasi, atau program mencoba untuk menetapkan nilai ke elemen dari tabel atau varray bersarang yang tidak diinisialisasi. |
DUP_VAL_ON_INDEX | 00001 | -1 | Ini dimunculkan ketika nilai duplikat dicoba untuk disimpan dalam kolom dengan indeks unik. |
INVALID_CURSOR | 01001 | -1001 | Dibesarkan ketika ada upaya untuk membuat operasi kursor yang tidak diizinkan, seperti menutup kursor yang belum dibuka. |
INVALID_NUMBER | 01722 | -1722 | Dibesarkan ketika konversi string karakter menjadi angka gagal karena string tidak mewakili angka yang valid. |
LOGIN_DENIED | 01017 | -1017 | Ini dimunculkan ketika sebuah program mencoba masuk ke database dengan nama pengguna atau kata sandi yang tidak valid. |
NO_DATA_FOUND | 01403 | +100 | Ini dimunculkan ketika pernyataan SELECT INTO tidak mengembalikan baris. |
NOT_LOGGED_ON | 01012 | -1012 | Dimunculkan saat panggilan database dilakukan tanpa terhubung ke database. |
PROGRAM_ERROR | 06501 | -6501 | Dimunculkan ketika PL/SQL memiliki masalah internal. |
ROWTYPE_MISMATCH | 06504 | -6504 | Ini dimunculkan ketika kursor mengambil nilai dalam variabel yang memiliki tipe data yang tidak kompatibel. |
SELF_IS_NULL | 30625 | -30625 | Ini dimunculkan ketika metode anggota dipanggil, tetapi instance dari tipe objek tidak diinisialisasi. |
STORAGE_ERROR | 06500 | -6500 | Dimunculkan ketika PL/SQL kehabisan memori atau memori rusak. |
TOO_MANY_ROWS | 01422 | -1422 | Ini dimunculkan ketika pernyataan SELECT INTO mengembalikan lebih dari satu baris. |
VALUE_ERROR | 06502 | -6502 | Ini dimunculkan ketika terjadi kesalahan aritmatika, konversi, pemotongan, atau batasan ukuran. |
ZERO_DIVIDE | 01476 | 1476 | Dibesarkan ketika ada upaya untuk membagi angka dengan nol. |
Contoh
CREATE OR REPLACE PROCEDURE add_new_student (student _id_in IN NUMBER, student _name_in IN VARCHAR2) IS BEGIN INSERT INTO student (student _id, student _name ) VALUES ( student _id_in, student _name_in ); EXCEPTION WHEN DUP_VAL_ON_INDEX THEN raise_application_error (-20001,'Duplicate student _id'); WHEN OTHERS THEN raise_application_error (-20002,'An error occurred.'); END;
Melanjutkan artikel ini tentang penanganan pengecualian di PL/SQL, mari kita pahami apa itu pengecualian sistem tanpa nama.
Pengecualian Sistem Tanpa Nama
Pengecualian sistem yang tidak memiliki nama Oracle dikenal sebagai pengecualian sistem tanpa nama. Pengecualian ini tidak sering terjadi dan ditulis dengan kode dan pesan terkait.
Pada dasarnya ada dua cara untuk menangani pengecualian sistem yang tidak disebutkan namanya:
1. Menggunakan pengendali pengecualian WHEN OTHERS
2. Mengaitkan kode pengecualian ke sebuah nama dan menggunakannya sebagai pengecualian bernama.
Beberapa langkah yang diikuti untuk pengecualian sistem yang tidak disebutkan namanya adalah:
- Tingkatkan secara implisit.
- Jika tidak ditangani di 'WHEN Others', maka harus ditangani secara eksplisit.
- Untuk menangani pengecualian secara eksplisit, mereka dapat dideklarasikan menggunakan Pragma EXCEPTION_INIT dan ditangani dengan merujuk nama pengecualian yang ditentukan pengguna di bagian pengecualian.
Contoh penanganan pengecualian yang tidak disebutkan namanya menggunakan Pragma EXCEPTION_INIT disediakan kemudian di artikel. Melanjutkan artikel tentang penanganan pengecualian di PL/SQL ini, mari kita pahami pengecualian yang ditentukan pengguna.
Ditentukan pengguna
Seperti semua bahasa pemrograman lainnya, Oracle juga memungkinkan Anda untuk mendeklarasikan iklan menerapkan pengecualian Anda sendiri. Tidak seperti pengecualian yang ditentukan Sistem, pengecualian ini dimunculkan secara eksplisit di blok PL/SQL.
Langkah-langkah untuk mendeklarasikan pengecualian yang ditentukan pengguna di database Oracle
Kita dapat mendefinisikan pengecualian yang ditentukan pengguna dalam database Oracle dengan 3 cara berikut:
- Menggunakan Variabel bertipe EXCEPTION
Di sini, kita dapat mendeklarasikan pengecualian yang ditentukan Pengguna dengan mendeklarasikan variabel tipe data PENGECUALIAN dalam kode kita dan menaikkannya secara eksplisit dalam program kita menggunakan pernyataan RAISE.
- Menggunakan fungsi PRAGMA EXCEPTION_INIT
Kita dapat mendefinisikan nomor kesalahan yang tidak ditentukan sebelumnya dengan variabel tipe data PENGECUALIAN
- Menggunakan metode RAISE_APPLICATION_ERROR
Dengan menggunakan metode ini, kami dapat mendeklarasikan pengecualian yang ditentukan Pengguna dengan nomor dan pesan kesalahan kami sendiri yang disesuaikan.
Sampai sekarang Anda mungkin telah mendapatkan gambaran kasar tentang cara-cara di mana kami dapat meningkatkan pengecualian yang ditentukan Pengguna di PL/SQL. Kita akan mempelajari tentang masing-masing metode yang disebutkan di atas dengan contoh lebih lanjut dalam artikel ini tentang penanganan pengecualian di PL/SQL.
Berikutnya dalam artikel ini, mari kita lanjutkan dengan demonstrasi penanganan pengecualian yang ditentukan pengguna.
Peragaan Pengecualian Buatan Pengguna
Melanjutkan artikel tentang Penanganan Exception di PL/SQL, mari kita pahami cara menggunakan variabel tipe EXCEPTION.
Menggunakan Variabel bertipe EXCEPTION
Proses mendeklarasikan pengecualian yang ditentukan pengguna dibagi menjadi tiga bagian dan 3 bagian ini adalah:
- Deklarasikan tipe data pengecualian variabel
- Tingkatkan Pengecualian
- Menangani Pengecualian
Mari kita menulis kode untuk mendemonstrasikan langkah-langkah di atas secara mendetail.
DECLARE var_dividend NUMBER :=10; var_divisor NUMBER :=0 var_result NUMBER; ex-DivZero EXCEPTION
Dalam blok deklarasi di atas, kami memiliki empat variabel, di antaranya tiga yang pertama adalah variabel tipe data angka normal dan yang keempat adalah ex_DivZero adalah variabel tipe data pengecualian khusus. Yang keempat adalah pengecualian yang ditentukan pengguna kami.
DECLARE var_dividend NUMBER :=10; var_divisor NUMBER :=0 var_result NUMBER; ex-DivZero EXCEPTION
Bagian eksekusi di atas dari blok anonim ini, akan beraksi hanya jika pembaginya 0. Jika pembaginya nol seperti dalam kasus kita, kesalahan akan dimunculkan dan kontrol program akan melewatkan semua langkah berikutnya dan akan mencari penangan pengecualian yang cocok. Dalam kasus di mana ia menemukan yang lain, ia akan melakukan tindakan yang sesuai, jika tidak ia akan menghentikan program atau meminta kami dengan kesalahan yang ditentukan sistem yang tidak tertangani.
EXCEPTION WHEN ex_DivZero THEN DBMS_OUTPUT.PUT_LINE(‘ ERROR, The divisor can’t be zero’);
Ini penangan pengecualian. Segera setelah pengguna memasukkan pembagi sebagai 0, string pesan di atas akan diminta.
Kode Akhir:
DECLARE var_dividend NUMBER :=10; var_divisor NUMBER :=0 var_result NUMBER; ex-DivZero EXCEPTION BEGIN IF var_divisor =0 THEN RAISE ex-DivZero; END IF; Var_result := var_dividend/var_divisor; DBMS_OUTPUT.PUT_LINE (‘Result = ‘ || var_result); BEGIN IF var_divisor =0 THEN RAISE ex-DivZero; END IF; Var_result := var_dividend/var_divisor; DBMS_OUTPUT.PUT_LINE (‘Result = ‘ || var_result); END;
Melanjutkan artikel tentang penanganan eksepsi di PL/SQL ini, mari kita pahami cara menggunakan metode PRAGMA_EXCEPTION_INIT.
Menggunakan fungsi PRAGMA EXCEPTION_INIT
Dalam fungsi PRAGMA EXCEPTION_INIT, nama pengecualian dikaitkan dengan nomor kesalahan Oracle. Nama ini dapat digunakan dalam mendesain penangan pengecualian untuk kesalahan. Untuk proyek besar dengan banyak kesalahan yang ditentukan pengguna, PRAGMA EXCEPTION_INIT adalah metode yang paling berguna dan cocok.
Sintaks:
PRAGMA EXCEPTION_INIT(exception_name, -Oracle_error_number);
Contoh
DECLARE deadlock_detected EXCEPTION; PRAGMA EXCEPTION_INIT(deadlock_detected, -60); BEGIN NULL; -- Some operation that causes an ORA-00060 error EXCEPTION WHEN deadlock_detected THEN NULL; -- handle the error END;
PRAGMA EXCEPTION_INIT memberi tahu kompiler untuk mengaitkan nama pengecualian dengan nomor kesalahan Oracle seperti yang disebutkan sebelumnya. Ini memungkinkan Anda merujuk ke pengecualian internal apa pun dengan nama dan menulis penangan khusus untuk itu. Saat Anda melihat tumpukan kesalahan, atau urutan pesan kesalahan, yang di atas adalah yang dapat dijebak dan ditangani.
Melanjutkan artikel tentang Penanganan Pengecualian di PL/SQL ini, mari kita pahami cara menggunakan metode RAISE_APPLICATION_ERROR.
Menggunakan metode RAISE_APPLICATION_ERROR
Ini adalah prosedur yang disertakan dengan perangkat lunak oracle. Dengan menggunakan prosedur ini, kami dapat mengaitkan nomor kesalahan dengan pesan kesalahan khusus. Menggabungkan nomor kesalahan dan pesan kesalahan khusus, string kesalahan dapat disusun yang terlihat mirip dengan string kesalahan default yang ditampilkan oleh Oracle ketika terjadi kesalahan. Prosedur RAISE_APPLICATION_ERROR ditemukan di dalam paket DBMS_STANDARD
Sintaks
raise_application_error (error_number, message [, {TRUE | FALSE}]);
Contoh
/* A trigger trg_emp_detail_chk is created.*/ CREATE OR REPLACE TRIGGER trg_emp_detail_chk /* The trigger timing is declared as BEFORE UPDATE on the EMPLOYEES table.*/ Before UPDATE ON employees DECLARE permission_denied EXCEPTION; BEGIN /*Start of the IF condition checking whether the day of the system time is either Saturday or Sunday or not.*/ IF trim(TO_CHAR(sysdate,'Day')) IN ('Saturday', 'Sunday') THEN raise_application_error(-20000, 'You are not authorized to do any modification in the weekends!!'); /* The procedure raise_application_error is called with the first parameter value as -20000 and the second parameter with a default text stating that the user is not authorized to do any modification in the weekends. */ END IF; END;
Dengan ini kita mengakhiri artikel tentang “Penanganan pengecualian di PL/SQL” ini. Saya harap topik ini dipahami dengan baik dan membantu Anda. Cobalah untuk menulis kode Anda sendiri dan menggabungkan metode yang dijelaskan dalam artikel ini.
Jika Anda ingin mendapatkan pelatihan dari para profesional tentang teknologi ini, Anda dapat memilih pelatihan terstruktur dari edureka! Lihat Pelatihan Sertifikasi DBA MySQL ini oleh Edureka, perusahaan pembelajaran online tepercaya dengan jaringan lebih dari 250.000 pelajar yang puas yang tersebar di seluruh dunia. Kursus ini melatih Anda tentang konsep inti &alat dan teknik canggih untuk mengelola data dan mengelola Database MySQL. Ini mencakup pembelajaran langsung tentang konsep-konsep seperti MySQL Workbench, Server MySQL, Pemodelan Data, Konektor MySQL, Desain Basis Data, Baris Perintah MySQL, Fungsi MySQL, dll. Di akhir pelatihan, Anda akan dapat membuat dan mengelola Basis Data MySQL Anda sendiri dan mengelolanya data.
Ada pertanyaan untuk kami? Harap sebutkan di bagian komentar artikel “Penanganan Pengecualian dalam PL/SQL” ini dan kami akan menghubungi Anda sesegera mungkin.