Ketahui Cara Mengendalikan Pengecualian Dalam PL / SQL



Artikel ini adalah panduan komprehensif mengenai bagaimana melakukan pengendalian pengecualian dalam PL / SQL dengan membincangkan pelbagai jenis pengecualian yang ditawarkan dalam PL / SQL.

Sekiranya anda seorang pengaturcara, anda mungkin biasa dengan konsep pengendalian pengecualian adalah bahagian yang tidak terpisahkan dari mana-mana . Oleh kerana kesilapan tidak dapat dielakkan dan bahkan yang paling pintar dari kita dapat melakukan kesalahan semasa menulis kod, kita mesti mengetahui cara mengatasinya. Dalam artikel ini, kita akan belajar terutama mengenai pengendalian pengecualian dalam PL / SQL.

cara menyusun dalam java

Pengendalian Pengecualian SQL di PL / SQL-EdurekaBerikut adalah topik yang dibahas dalam artikel ini:





Apa itu Pengecualian?

Sebarang keadaan atau kejadian tidak normal yang mengganggu aliran normal arahan program kami pada waktu berjalan atau dengan kata mudah pengecualian adalah kesalahan.

Sintaks Pengendalian Pengecualian dalam PL / SQL

TAHNIAH MULAI PENGECUALIAN APABILA pengecualian1 KEMUDIAN pengecualian1-penyataan pengendalian KETIKA pengecualian2 KEMUDIAN pengecualian2-penyataan pengendalian KETIKA pengecualian3 KEMUDIAN pengecualian3-penyataan pengendalian ........ APABILA yang lain KENAPA pengecualian3-penyataan pengendalian TAMAT

Di sini, kami dapat menyenaraikan seberapa banyak pengecualian yang ingin kami atasi. Pengecualian lalai akan dikendalikan menggunakan 'KETIKA orang lain KEMUDIAN'



Contoh Pengendalian Pengecualian dalam PL / SQL

Program di bawah memaparkan nama dan alamat pelajar yang IDnya diberikan. Oleh kerana tidak ada pelajar dengan nilai ID 8 di pangkalan data kami, program ini menimbulkan pengecualian jangka masa NO_DATA_FOUND, yang ditangkap di blok PENGECUALIAN.

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 DARI pelajar DI MANA id = s_id DBMS_OUTPUT.PUT_LINE ('Nama:' || s_name) DBMS_OUT .PUT_LINE ('Lokasi:' || s_loc) PENGECUALIAN KETIKA tidak_data_dapat KEMUDIAN dbms_output.put_line ('Tidak ada pelajar seperti itu!') APABILA yang lain KINI dbms_output.put_line ('Alamak, Ralat!') TAMAT

Pengeluaran

Tiada pelajar seperti itu! Prosedur PL / SQL berjaya diselesaikan.

Di sini, kami dapat menyenaraikan seberapa banyak pengecualian yang ingin kami atasi. Pengecualian lalai akan dikendalikan menggunakan ‘ APABILA yang lain KINI '

Jenis Pengecualian dalam PL / SQL

  • Sistem ditentukan
  • Pengguna menentang

Selanjutnya dalam artikel ini mengenai pengendalian pengecualian di PL / SQL , mari kita bincangkan mengenai kedua-dua jenis ini secara terperinci.



Sistem ditentukan

Ditentukan dan dikekalkan secara tersirat oleh pelayan Oracle, pengecualian ini terutamanya ditentukan dalam Pakej Piawai Oracle. Setiap kali terdapat pengecualian di dalam program, pelayan Oracle sepadan dan mengenal pasti pengecualian yang sesuai dari sekumpulan pengecualian yang tersedia dalam pakej standard oracle. Pada dasarnya, pengecualian ini telah ditentukan sebelumnya PL / SQL yang dibangkitkan KETIKA peraturan pangkalan data tertentu dilanggar .

The Pengecualian yang ditentukan oleh sistem seterusnya dibahagikan kepada dua kategori:

  • Dinamakan pengecualian sistem
  • Pengecualian sistem tanpa nama

Sistem Pengecualian Dinamakan

Pengecualian PL / SQL yang dinamakan adalah dinamakan dalam pakej standard PL / SQL , oleh itu pembangun tidak perlu menentukan pengecualian PL / SQL dalam kod mereka. PL / SQL menyediakan banyak pengecualian bernama yang ditentukan sebelumnya, yang dilaksanakan ketika peraturan pangkalan data dilanggar oleh program. Jadual berikut menyenaraikan beberapa pengecualian & tolak penting yang telah ditentukan

Pengecualian Ralat Oracle SQLCODE Penerangan
AKSES_INTO_NULL06530-6530Ia dibangkitkan apabila objek nol diberikan nilai secara automatik.
KES_NOT_FOUND06592-6592Ia dibangkitkan apabila tidak ada pilihan dalam klausa APABILA a Penyataan KES dipilih, dan tidak ada klausa ELSE.
KOLEKSI_IS_NULL06531-6531Program ini dibangkitkan apabila program cuba menerapkan kaedah pengumpulan selain daripada SISA ke meja bersarang atau varray yang tidak diinisialisasi, atau program tersebut berusaha memberikan nilai pada elemen-elemen dari tabel bersarang atau varray yang belum dimulakan.
DUP_VAL_ON_INDEX00001-satuIni dinaikkan apabila nilai pendua cuba disimpan dalam lajur dengan indeks unik.
INVALID_CURSOR01001-1001Ini dibangkitkan apabila usaha dilakukan untuk membuat operasi kursor yang tidak dibenarkan, seperti menutup kursor yang belum dibuka.
NOMBOR TIDAK SAH01722-1722Ia dibangkitkan apabila penukaran rentetan watak menjadi nombor gagal kerana rentetan tidak mewakili nombor yang sah.
LOGIN_DENIED01017-1017Ini dibangkitkan apabila program cuba log masuk ke pangkalan data dengan nama pengguna atau kata laluan yang tidak sah.
TIADA DATA DIJUMPAI01403+100Ia dibangkitkan apabila pernyataan SELECT INTO tidak mengembalikan baris.
TIDAK_LOGGED_ON01012-1012Itu timbul apabila panggilan pangkalan data dikeluarkan tanpa disambungkan ke pangkalan data.
PROGRAM_ERROR06501-6501Ia dibangkitkan apabila PL / SQL mempunyai masalah dalaman.
ROWTYPE_MISMATCH06504-6504Ia dinaikkan apabila kursor mengambil nilai dalam pemboleh ubah yang mempunyai jenis data yang tidak serasi.
SELF_IS_NULL30625-30625Ini dibangkitkan ketika kaedah anggota dipanggil, tetapi contoh jenis objek tidak diinisialisasi.
STORAGE_ERROR06500-6500Ini dibangkitkan ketika PL / SQL kehabisan memori atau memori rosak.
TERLALU_MANY_ROWS01422-1422Ia dibangkitkan apabila pernyataan SELECT INTO mengembalikan lebih dari satu baris.
VALUE_ERROR06502-6502Ia timbul apabila berlaku kesalahan aritmetik, penukaran, pemotongan, atau kekangan ukuran.
ZERO_DIVIDE014761476Ini dibangkitkan apabila usaha dilakukan untuk membahagi nombor dengan sifar.

Contohnya

CREATE ATAU MENGGANTIKAN PROSEDUR add_new_student (pelajar _id_in IN NUMBER, pelajar _name_in DALAM VARCHAR2) IS BEGIN pelajar INSERT INTO (_id pelajar, _name pelajar) NILAI (_id_in pelajar, _name_in pelajar) PENGECUALIAN APABILA DUP_VAL_ON_INDEX THEN raise_application_error (-20.001, 'pelajar Duplicate _id' ) APABILA LAIN-LAIN meningkatkan_aplikasi_kesalahan (-20002, 'Ralat berlaku.)

Melanjutkan artikel ini mengenai pengendalian pengecualian dalam PL / SQL, mari kita memahami apa itu pengecualian sistem yang tidak disebutkan namanya.

Pengecualian Sistem Tanpa Nama

Pengecualian sistem yang tidak mempunyai nama Oracle dikenali sebagai pengecualian sistem tanpa nama. Pengecualian ini tidak kerap berlaku dan ditulis dengan kod dan mesej yang berkaitan.

Pada dasarnya ada dua cara untuk menangani pengecualian sistem tanpa nama:

1. Menggunakan pengendali pengecualian KETIKA LAIN

2. Mengaitkan kod pengecualian dengan nama dan menggunakannya sebagai pengecualian bernama.

Beberapa langkah yang diikuti untuk pengecualian sistem tanpa nama adalah:

  • Naikkan mereka secara tersirat.
  • Sekiranya mereka tidak ditangani dalam 'KETIKA Orang Lain', mereka harus ditangani secara terang-terangan.
  • Untuk menangani pengecualian secara eksplisit, mereka dapat dinyatakan menggunakan Pragma EXCEPTION_INIT dan ditangani dengan merujuk nama pengecualian yang ditentukan pengguna di bahagian pengecualian.

Contoh menangani pengecualian tanpa nama menggunakan Pragma EXCEPTION_INIT diberikan kemudian dalam artikel. Melanjutkan artikel ini mengenai pengendalian pengecualian dalam PL / SQL, mari kita memahami pengecualian yang ditentukan oleh Pengguna.

Ditentukan oleh pengguna

Seperti semua bahasa pengaturcaraan lain, Oracle juga membolehkan anda menyatakan iklan melaksanakan pengecualian anda sendiri. Tidak seperti pengecualian yang ditentukan oleh Sistem, pengecualian ini dibangkitkan secara eksplisit di blok PL / SQL.

Langkah-langkah untuk menyatakan pengecualian yang ditentukan pengguna dalam pangkalan data Oracle

Kami dapat menentukan pengecualian yang ditentukan pengguna dalam pangkalan data Oracle dengan 3 cara berikut:

  • Menggunakan Pembolehubah jenis PENGECUALIAN

Di sini, kita dapat menyatakan pengecualian yang ditentukan oleh Pengguna dengan menyatakan pemboleh ubah PENGECUALIAN jenis data dalam kod kami dan menaikkannya secara eksplisit dalam program kami menggunakan pernyataan RAISE.

  • Menggunakan fungsi PRAGMA EXCEPTION_INIT

Kita dapat menentukan nombor ralat yang tidak ditentukan dengan pemboleh ubah jenis data KECUALI

  • Menggunakan kaedah RAISE_APPLICATION_ERROR

Dengan menggunakan kaedah ini, kami dapat menyatakan pengecualian yang ditentukan oleh Pengguna dengan nombor dan mesej ralat kami sendiri.

Hingga kini anda mungkin mendapat idea kasar mengenai cara-cara di mana kami dapat meningkatkan pengecualian yang ditentukan oleh pengguna dalam PL / SQL. Kami akan mempelajari setiap kaedah yang disebutkan di atas dengan contoh lebih lanjut dalam artikel ini mengenai pengendalian pengecualian dalam PL / SQL.

Selanjutnya dalam artikel ini, mari kita teruskan dengan demonstrasi pengendalian pengecualian yang ditentukan pengguna.

Demonstrasi Pengecualian yang ditentukan oleh Pengguna

Melanjutkan artikel ini mengenai Pengecualian Pengecualian dalam PL / SQL, mari kita memahami bagaimana menggunakan pemboleh ubah jenis PENGECUALIAN.

Menggunakan Pembolehubah jenis PENGECUALIAN

Proses menyatakan pengecualian yang ditentukan pengguna terbahagi kepada tiga bahagian dan 3 bahagian ini adalah:

  • Menyatakan jenis data pengecualian pemboleh ubah
  • Naikkan Pengecualian
  • Tangani Pengecualian

Mari tulis kod untuk menunjukkan langkah-langkah di atas secara terperinci.

TAHNIAH var_dividen NOMBOR: = 10 var_divisor NUMBER: = 0 var_result NUMBER ex-DivZero EXCEPTION

Dalam blok deklarasi di atas, kami mempunyai empat pemboleh ubah, di antaranya tiga yang pertama adalah pemboleh ubah jenis data nombor normal dan yang keempat yang merupakan ex_DivZero adalah pemboleh ubah jenis data pengecualian khas. Yang keempat adalah pengecualian yang ditentukan pengguna.

TAHNIAH var_dividen NOMBOR: = 10 var_divisor NUMBER: = 0 var_result NUMBER ex-DivZero EXCEPTION

Bahagian pelaksanaan di atas blok tanpa nama ini, akan berlaku hanya apabila pembahagi adalah 0. Sekiranya pembahagi adalah sifar seperti yang berlaku dalam kes kita, kesalahan akan dibangkitkan dan kawalan program akan melangkau semua langkah seterusnya dan akan mencari pengendali pengecualian yang sepadan. Sekiranya ia menemui yang lain, tindakan tersebut akan dilakukan dengan sewajarnya, jika tidak, ia akan menghentikan program ini atau meminta kami melakukan kesalahan yang ditentukan oleh sistem yang tidak ditangani.

KECUALI KETIKA ex_DivZero KEMUDIAN DBMS_OUTPUT.PUT_LINE (‘RALAT, Pembahagi tidak boleh menjadi sifar’)

Ini pengendali pengecualian. Sebaik sahaja pengguna memasukkan pembahagi 0, rentetan mesej di atas akan diminta.

Kod Akhir:

TAHNIAH var_dividen NOMBOR: = 10 var_divisor NOMBOR: = 0 var_result NUMBER ex-DivZero PENGECUALIAN MULAI JIKA var_divisor = 0 KEMUDIAN TINGGALKAN ex-DivZero TAMAT JIKA Var_result: = var_dividend / var_divisor DBMS_OUTPUT.PUT_LINE ('Res_ = 0 KEMUDIAN TINGKATKAN ex-DivZero TAMAT JIKA Var_result: = var_dividend / var_divisor DBMS_OUTPUT.PUT_LINE ('Hasil =' || var_result) TAMAT

Melanjutkan artikel ini mengenai pengendalian pengecualian dalam PL / SQL, marilah kita memahami cara menggunakan kaedah PRAGMA_EXCEPTION_INIT.

Menggunakan fungsi PRAGMA EXCEPTION_INIT

Di dalam Fungsi PRAGMA EXCEPTION_INIT, nama pengecualian dikaitkan dengan nombor ralat Oracle. Nama ini dapat digunakan dalam merancang pengendali pengecualian untuk kesalahan.Untuk projek besar dengan banyak kesalahan yang ditentukan pengguna, PRAGMA EXCEPTION_INIT adalah kaedah yang paling berguna dan sesuai.

Sintaks:

PRAGMA EXCEPTION_INIT (pengecualian_nama, -Oracle_error_number)

Contohnya

DECLARE deadlock_detected EXCEPTION PRAGMA EXCEPTION_INIT (deadlock_detected, -60) BEGIN NULL - Beberapa operasi yang menyebabkan ralat ORA-00060 KECUALI APABILA deadlock_detected THEN NULL - menangani ralat TAMAT

PRAGMA EXCEPTION_INIT memberitahu penyusun untuk mengaitkan nama pengecualian dengan nombor ralat Oracle seperti yang disebutkan sebelumnya. Ini membolehkan anda merujuk kepada pengecualian dalaman dengan nama dan menulis pengendali khusus untuknya. Apabila anda melihat timbunan ralat, atau urutan mesej ralat, yang berada di atas adalah yang boleh terperangkap dan ditangani.

Melanjutkan artikel ini mengenai Pengecualian Pengecualian dalam PL / SQL, marilah kita memahami cara menggunakan kaedah RAISE_APPLICATION_ERROR.

Menggunakan kaedah RAISE_APPLICATION_ERROR

Ini adalah prosedur yang disertakan dengan perisian oracle. Dengan menggunakan prosedur ini, kita dapat mengaitkan nombor ralat dengan mesej ralat tersuai. Menggabungkan kedua-dua nombor ralat dan pesan ralat kustom, rentetan ralat dapat disusun yang terlihat serupa dengan rentetan ralat lalai yang ditampilkan oleh oracle ketika ralat ditemui. Prosedur RAISE_APPLICATION_ERROR terdapat di dalam pakej DBMS_STANDARD

Sintaks

tingkatkan_aplikasi_kesalahan (error_number, message [, TRUE])

Contohnya

/ * Pencetus trg_emp_detail_chk dibuat. * / BUAT ATAU GANTIKAN TRIGGER trg_emp_detail_chk / * Masa pencetus dinyatakan sebagai SEBELUM DIKEMASKINI pada jadual PEKERJA. * / Sebelum KEMASKINI PADA pekerja MENGAKTIFKAN izin_terlalu KECUALI SEKIRANYA / sama ada MEMANDU keadaan sama ada * hari waktu sistem sama ada Sabtu atau Ahad atau tidak. * / JIKA trim (TO_CHAR (sysdate, 'Day')) IN ('Saturday', 'Sunday') KEMUDIAN kenaikan_aplikasi_error (-20000, 'Anda tidak dibenarkan melakukan apa-apa pengubahsuaian pada hujung minggu !! ') / * Prosedur kenaikan_aplikasi_ kesalahan dipanggil dengan nilai parameter pertama sebagai -20000 dan parameter kedua dengan teks lalai yang menyatakan bahawa pengguna tidak dibenarkan melakukan pengubahsuaian pada hujung minggu. * / TAMAT JIKA TAMAT

Dengan ini kita sampai pada akhir artikel ini tentang 'Pengecualian pengendalian dalam PL / SQL'. Saya harap topik ini difahami dengan baik dan membantu anda. Cuba tuliskan kod anda sendiri dan masukkan kaedah yang dijelaskan dalam artikel ini.

boneka digunakan untuk apa

Sekiranya anda ingin dilatih daripada profesional mengenai teknologi ini, anda boleh memilih latihan berstruktur dari edureka! Lihat ini oleh Edureka, sebuah syarikat pembelajaran dalam talian yang dipercayai dengan rangkaian lebih daripada 250,000 pelajar berpuas hati yang tersebar di seluruh dunia. Kursus ini melatih anda mengenai konsep teras & alat dan teknik canggih untuk mengurus data dan mentadbir Pangkalan Data MySQL. Ia merangkumi pembelajaran langsung mengenai konsep seperti MySQL Workbench, MySQL Server, Data Modeling, MySQL Connector, Database Design, MySQL Command line, MySQL Functions dll. Akhir latihan, anda akan dapat membuat dan mentadbir Pangkalan Data MySQL anda sendiri dan mengurus data.

Ada soalan untuk kami? Sila sebutkan di bahagian komen dari artikel 'Pengecualian Pengecualian dalam PL / SQL' ini dan kami akan menghubungi anda secepat mungkin.