Pelajari Bagaimana Menangani Pengecualian Dalam PL / SQL



Artikel ini adalah panduan komprehensif tentang cara melakukan penanganan pengecualian di PL / SQL dengan membahas berbagai jenis pengecualian yang ditawarkan di PL / SQL.

Jika Anda seorang programmer, Anda mungkin sudah tidak asing lagi dengan konsep penanganan pengecualian yang merupakan bagian integral dari apapun . Karena kesalahan tidak dapat dihindari dan bahkan yang terpintar dari kita dapat membuat kesalahan saat menulis kode, kita harus mengetahui cara menanganinya. Pada artikel ini, kita akan belajar khususnya tentang penanganan exception di PL / SQL.

Penanganan SQL-Exception di PL / SQL-EdurekaDi bawah ini adalah topik yang dibahas dalam artikel ini:





Apa itu Pengecualian?

Setiap kondisi atau peristiwa abnormal yang mengganggu aliran normal instruksi program kami pada waktu berjalan atau dengan kata sederhana pengecualian adalah kesalahan.

Sintaks Penanganan Pengecualian dalam PL / SQL

MENYATAKAN DIMULAI PENGECUALIAN KETIKA pengecualian1 MAKA pengecualian1-penanganan-pernyataan KETIKA pengecualian2 LALU pengecualian2-penanganan-pernyataan KETIKA pengecualian3 MAKA pengecualian3-penanganan-pernyataan ........ KETIKA orang lain MAKA pengecualian3-penanganan-pernyataan AKHIR

Di sini, kami dapat membuat daftar pengecualian sebanyak yang ingin kami 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 KTP-nya diberikan. Karena tidak ada siswa dengan nilai ID 8 dalam database kami, program memunculkan pengecualian run-time NO_DATA_FOUND, yang ditangkap di blok EXCEPTION.

MENYATAKAN 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) PENGECUALIAN KETIKA no_data_found THEN dbms_output.put_line ('No such student!') WHEN other THEN dbms_output.put_line ('Ups, Error!') END

Keluaran

Tidak ada siswa seperti itu! Prosedur PL / SQL berhasil diselesaikan.

Di sini, kami dapat membuat daftar pengecualian sebanyak yang ingin kami tangani. Pengecualian default akan ditangani menggunakan ' KETIKA orang lain LALU '

Jenis Pengecualian di PL / SQL

  • Sistem ditentukan
  • Pengguna menentang

Berikutnya dalam artikel ini tentang penanganan pengecualian di PL / SQL , mari kita bahas tentang kedua jenis ini secara detail.



Sistem ditentukan

Didefinisikan dan dipelihara secara implisit oleh server Oracle, pengecualian ini terutama ditentukan dalam Paket Standar Oracle. Setiap kali terjadi pengecualian di dalam program, server Oracle akan mencocokkan dan mengidentifikasi pengecualian yang sesuai dari kumpulan pengecualian yang tersedia dalam paket standar oracle. Pada dasarnya, pengecualian ini ditentukan sebelumnya di PL / SQL yang dibesarkan KETIKA aturan database tertentu dilanggar .

Itu Pengecualian yang ditentukan sistem selanjutnya dibagi menjadi dua kategori:

  • Pengecualian sistem bernama
  • Pengecualian sistem tanpa nama

Pengecualian sistem bernama

Pengecualian PL / SQL bernama adalah dinamai dalam paket standar PL / SQL , karenanya pengembang tidak perlu mendefinisikan pengecualian PL / SQL dalam kodenya. PL / SQL menyediakan banyak pengecualian bernama yang telah ditentukan sebelumnya, yang dijalankan ketika ada aturan database yang dilanggar oleh program. Tabel berikut mencantumkan beberapa pengecualian & minus penting yang telah ditentukan sebelumnya

Pengecualian Kesalahan Oracle SQLCODE Deskripsi
ACCESS_INTO_NULL06530-6530Dibesarkan ketika objek null secara otomatis diberi nilai.
CASE_NOT_FOUND06592-6592Dibesarkan jika tidak ada pilihan dalam klausa WHEN dari a Pernyataan CASE dipilih, dan tidak ada klausa ELSE.
COLLECTION_IS_NULL06531-6531Dibesarkan ketika program mencoba menerapkan metode pengumpulan selain EXISTS ke tabel atau varray bersarang yang tidak diinisialisasi, atau program mencoba untuk menetapkan nilai ke elemen tabel atau varray bersarang yang tidak diinisialisasi.
DUP_VAL_ON_INDEX00001-satuDibesarkan saat nilai duplikat dicoba untuk disimpan dalam kolom dengan indeks unik.
INVALID_CURSOR01001-1001Dibesarkan ketika upaya dilakukan untuk membuat operasi kursor yang tidak diperbolehkan, seperti menutup kursor yang belum dibuka.
INVALID_NUMBER01722-1722Dibesarkan ketika konversi string karakter menjadi angka gagal karena string tidak mewakili angka yang valid.
LOGIN_DENIED01017-1017Dibesarkan ketika program mencoba masuk ke database dengan nama pengguna atau kata sandi yang tidak valid.
TIDAK ADA DATA DITEMUKAN01403+100Dibesarkan ketika pernyataan SELECT INTO tidak mengembalikan baris.
NOT_LOGGED_ON01012-1012Dibesarkan ketika panggilan database dikeluarkan tanpa terhubung ke database.
PROGRAM_ERROR06501-6501Dibesarkan ketika PL / SQL memiliki masalah internal.
ROWTYPE_MISMATCH06504-6504Dibesarkan saat kursor mengambil nilai dalam variabel yang memiliki tipe data yang tidak kompatibel.
SELF_IS_NULL30625-30625Itu dimunculkan ketika metode anggota dipanggil, tetapi contoh tipe objek tidak diinisialisasi.
STORAGE_ERROR06500-6500Dibesarkan ketika PL / SQL kehabisan memori atau memori rusak.
TOO_MANY_ROWS01422-1422Dibesarkan ketika pernyataan SELECT INTO mengembalikan lebih dari satu baris.
VALUE_ERROR06502-6502Dibesarkan ketika terjadi kesalahan batasan aritmatika, konversi, pemotongan, atau ukuran.
ZERO_DIVIDE014761476Dibesarkan saat percobaan dilakukan untuk membagi angka dengan nol.

Contoh

BUAT ATAU GANTI PROSEDUR add_new_student (siswa _id_in DALAM NOMOR, siswa _name_in DI VARCHAR2) DIMULAI MASUKKAN KE siswa (siswa _id, siswa _nama) NILAI (siswa _id_in, siswa _nama_in) EXCEPTION KETIKA DUP_VAL_ON_INDEX THEN, ajukan_aplikasi_ ) KETIKA ORANG LAIN LALU raise_application_error (-20002, 'Terjadi kesalahan.') SELESAI

Melanjutkan artikel ini tentang penanganan pengecualian di PL / SQL, mari kita memahami 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 tanpa nama:

1. Menggunakan pengendali pengecualian WHEN OTHERS

2. Mengaitkan kode pengecualian ke nama dan menggunakannya sebagai pengecualian bernama.

Beberapa langkah yang diikuti untuk pengecualian sistem tanpa nama adalah:

  • Angkat mereka secara implisit.
  • Jika mereka tidak ditangani di 'WHEN Others' maka, mereka 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 tanpa nama menggunakan Pragma EXCEPTION_INIT disediakan nanti di artikel. Pindah ke artikel ini tentang penanganan pengecualian di PL / SQL, mari kita pahami excetpions yang ditentukan pengguna.

bagaimana mengkompilasi di java

Ditetapkan pengguna

Seperti semua bahasa pemrograman lainnya, Oracle juga memungkinkan Anda untuk mendeklarasikan penerapan iklan 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 tipe EXCEPTION

Di sini, kita dapat mendeklarasikan pengecualian yang ditentukan pengguna dengan mendeklarasikan variabel EXCEPTION tipe data dalam kode kami dan meningkatkannya secara eksplisit dalam program kami menggunakan pernyataan RAISE.

  • Menggunakan fungsi PRAGMA EXCEPTION_INIT

Kita dapat mendefinisikan nomor kesalahan yang tidak ditentukan dengan variabel tipe data EXCEPTION

  • Menggunakan metode RAISE_APPLICATION_ERROR

Dengan menggunakan metode ini, kita dapat mendeklarasikan pengecualian yang ditentukan pengguna dengan nomor dan pesan kesalahan yang kita sesuaikan sendiri.

Sampai sekarang Anda mungkin telah mendapat gambaran kasar tentang cara 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.

Selanjutnya dalam artikel ini, mari kita lanjutkan dengan demonstrasi penanganan pengecualian yang ditentukan pengguna.

Demonstrasi Pengecualian yang Ditentukan Pengguna

Melanjutkan artikel tentang Penanganan Pengecualian di PL / SQL ini, mari kita pahami cara menggunakan variabel tipe EXCEPTION.

c ++ mengurutkan array

Menggunakan Variabel tipe EXCEPTION

Proses mendeklarasikan pengecualian yang ditentukan pengguna dibagi menjadi tiga bagian dan 3 bagian ini adalah:

  • Deklarasikan tipe data pengecualian variabel
  • Angkat Pengecualian
  • Tangani Pengecualian

Mari tulis kode untuk mendemonstrasikan langkah-langkah di atas secara mendetail.

MENYATAKAN var_dividend NOMOR: = 10 var_divisor NOMOR: = 0 var_result NOMOR ex-DivZero PENGECUALIAN

Pada blok deklarasi di atas, kita 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.

MENYATAKAN var_dividend NOMOR: = 10 var_divisor NOMOR: = 0 var_result NOMOR ex-DivZero EXCEPTION

Bagian eksekusi di atas dari blok anonim ini, akan beraksi hanya jika pembagi adalah 0. Jika pembagi adalah nol seperti dalam kasus kita, kesalahan akan dimunculkan dan kontrol program akan melewati 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.

PENGECUALIAN KETIKA ex_DivZero THEN DBMS_OUTPUT.PUT_LINE (‘ERROR, Pembagi tidak boleh nol’)

Ini pengendali pengecualian. Segera setelah pengguna memasukkan pembagi sebagai 0, string pesan di atas akan diminta.

Kode Akhir:

MENYATAKAN var_dividend NOMOR: = 10 var_divisor NOMOR: = 0 var_result NOMOR ex-DivZero PENGECUALIAN DIMULAI JIKA var_divisor = 0 MAKA RAISE ex-DivZero AKHIR JIKA Var_result: = var_dividend / var_divisor IF vMS_OUTPUT.PUT_LINE ('Hasil =' || vEGINar = 0 LALU RAISE ex-DivZero AKHIR JIKA Var_result: = var_dividend / var_divisor DBMS_OUTPUT.PUT_LINE ('Result =' || var_result) END

Melanjutkan artikel ini tentang penanganan pengecualian di PL / SQL, 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 tersebut.Untuk proyek besar dengan banyak kesalahan yang ditentukan pengguna, PRAGMA EXCEPTION_INIT adalah metode yang paling berguna dan sesuai.

Sintaksis:

PRAGMA EXCEPTION_INIT (nama_kecualian, -Oracle_error_number)

Contoh

MENYATAKAN deadlock_detected EXCEPTION PRAGMA EXCEPTION_INIT (deadlock_detected, -60) BEGIN NULL - Beberapa operasi yang menyebabkan error ORA-00060 KECUALI KETIKA deadlock_detected THEN NULL - tangani error END

PRAGMA EXCEPTION_INIT memberitahu kompiler untuk mengasosiasikan 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 untuknya. Ketika Anda melihat tumpukan kesalahan, atau urutan pesan kesalahan, yang di atas adalah yang bisa terjebak dan ditangani.

Pindah ke artikel ini tentang Penanganan Pengecualian di PL / SQL, mari kita memahami cara menggunakan metode RAISE_APPLICATION_ERROR.

Menggunakan metode RAISE_APPLICATION_ERROR

Ini adalah prosedur yang disertakan dengan perangkat lunak oracle. Dengan menggunakan prosedur ini kita dapat mengaitkan nomor kesalahan dengan pesan kesalahan khusus. Menggabungkan baik nomor kesalahan dan pesan kesalahan kustom, string kesalahan dapat dibuat yang terlihat mirip dengan string kesalahan default yang ditampilkan oleh oracle ketika kesalahan ditemukan. Prosedur RAISE_APPLICATION_ERROR ditemukan di dalam paket DBMS_STANDARD

Sintaksis

raise_application_error (bilangan_ kesalahan, pesan [, BENAR])

Contoh

/ * Pemicu trg_emp_detail_chk dibuat. * / BUAT ATAU GANTI PEMICU trg_emp_detail_chk / * Waktu pemicu dideklarasikan sebagai SEBELUM PEMBARUAN pada tabel KARYAWAN. * / Sebelum UPDATE PADA karyawan MENYATAKAN permission_denied PENGECUALIAN DIMULAI / * Mulai dari kondisi IF memeriksa apakah kondisi hari waktu sistem adalah Sabtu atau Minggu atau tidak. * / JIKA trim (TO_CHAR (sysdate, 'Day')) IN ('Saturday', 'Sunday') MAKA raise_application_error (-20000, 'Anda tidak diizinkan untuk melakukan modifikasi apapun di akhir pekan !! ') / * Prosedur raise_application_error dipanggil dengan nilai parameter pertama sebagai -20000 dan parameter kedua dengan teks default yang menyatakan bahwa pengguna tidak berwenang untuk melakukan modifikasi apapun di akhir pekan. * / AKHIR JIKA AKHIR

Dengan ini kita sampai pada akhir artikel ini tentang 'Penanganan pengecualian di PL / SQL'. Saya harap topik ini dipahami dengan baik dan membantu Anda. Cobalah untuk menulis kode Anda sendiri dan gabungkan 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 ini oleh Edureka, perusahaan pembelajaran online tepercaya dengan jaringan lebih dari 250.000 pelajar yang puas dan tersebar di seluruh dunia. Kursus ini melatih Anda tentang konsep inti & alat dan teknik lanjutan untuk mengelola data dan mengelola Basis Data MySQL. Ini mencakup pembelajaran langsung tentang konsep-konsep seperti Meja Kerja MySQL, 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 mengelola data.

Ada pertanyaan untuk kami? Harap sebutkan di bagian komentar dari artikel 'Penanganan Pengecualian di PL / SQL' dan kami akan menghubungi Anda kembali secepatnya.