Ringkasan. tutorial ini menunjukkan cara menggunakan penangan MySQL untuk menangani pengecualian atau kesalahan yang ditemui dalam prosedur tersimpan Show
Ketika kesalahan terjadi di dalam prosedur tersimpan, penting untuk menanganinya dengan tepat, seperti melanjutkan atau keluar dari eksekusi blok kode saat ini, dan mengeluarkan pesan kesalahan yang berarti MySQL menyediakan cara mudah untuk mendefinisikan penangan yang menangani dari kondisi umum seperti peringatan atau pengecualian hingga kondisi tertentu e. g. , kode kesalahan tertentu Mendeklarasikan penanganUntuk mendeklarasikan penangan, gunakan pernyataan
1 DECLARE action HANDLER FOR pernyataan condition_value; Jika suatu kondisi yang nilainya cocok dengan
Contoh penanganan kesalahan MySQLMari kita lihat beberapa contoh mendeklarasikan penangan Handler berikut berarti bahwa jika terjadi error, tetapkan nilai variabel
1 DECLARE CONTINUE HANDLER UNTUK SET SQLEXCEPTION has_error = 1; Berikut ini adalah penangan lain yang artinya jika terjadi kesalahan, kembalikan operasi sebelumnya, keluarkan pesan kesalahan, dan keluar dari blok kode saat ini. Jika Anda mendeklarasikannya di dalam
1 2 3 4 5 MENYATAKAN EXIT HANDLER UNTUK SQLEXCEPTION MULAI KEMBALIKAN; PILIH 'Terjadi kesalahan, operasi dibatalkan dan prosedur tersimpan dihentikan'; AKHIR; Penangan berikut berarti bahwa jika tidak ada lagi baris untuk diambil, dalam hal pernyataan kursor atau SELECT INTO , tetapkan nilai variabel
1 DECLARE CONTINUE HANDLER FOR NOT FOUND SET no_row_found = 1; Penangan berikut berarti bahwa jika terjadi kesalahan kunci duplikat, kesalahan MySQL 1062 dikeluarkan. Itu mengeluarkan pesan error dan melanjutkan eksekusi
1 2 MENYATAKAN LANJUTKAN HANDLER UNTUK 1062 SELECT 'Kesalahan, terjadi kunci duplikat';
Contoh penangan MySQL dalam prosedur tersimpanPertama, kita membuat tabel baru bernama
1 2 3 4 5 BUAT TABEL article_tags( artikel_id INT, tag_id INT, KUNCI UTAMA(article_id,tag_id) ); Tabel Selanjutnya, kita membuat stored procedure yang menyisipkan article id dan tag id ke tabel
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 DELIMITER $$
BUAT PROSEDUR insert_article_tags(IN article_id INT, IN tag_id INT) MULAI
DECLARECONTINUEHANDLER UNTUK1062 SELECT CONCAT('duplikat kunci (',article_id,',',tag_id,') ditemukan')ASmsg;
--masukkannewrecord ke article_tags MASUKKAN KE article_tags(article_id,tag_id) NILAI(id_artikel,id_tag);
--returntag dihitung untuk artikel tersebut SELECT COUNT(*)FROM article_tags; AKHIR Kemudian, kami menambahkan tag id 1, 2, dan 3 untuk artikel 1 dengan memanggil prosedur tersimpan
1 2 3 CALL insert_article_tags(1,1); CALL insert_article_tags(1,2); CALL insert_article_tags(1,3); Setelah itu, kami mencoba memasukkan kunci duplikat untuk memeriksa apakah penangan benar-benar dipanggil
1 CALL insert_article_tags(1,3); Kami mendapat pesan kesalahan. Namun, karena kami mendeklarasikan penangan sebagai Jika kami mengubah
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 DELIMITER $$
BUAT PROSEDUR insert_article_tags_2(IN article_id INT, IN tag_id INT) MULAI
DECLAREEXITHANDLERFORSQLEXCEPTION SELECT'SQLException dipanggil';
DECLAREEXITHANDLERFOR 1062 SELECT 'Kode kesalahan MySQL 1062 dipanggil';
DECLAREEXITHANDLERFORSQLSTATE'23000' SELECT'SQLSTATE 23000 dipanggil';
-- masukkan record baru ke dalam article_tags INSERTINTO article_tags(article_id,tag_id) NILAI(id_artikel,id_tag);
-- kembalikan jumlah tag untuk artikel tersebut SELECT COUNT(*)FROM article_tags; AKHIR Terakhir, kita dapat mencoba menambahkan kunci duplikat untuk melihat efeknya
1 CALL insert_article_tags_2(1,3);
Prioritas penangan MySQLJika ada beberapa penangan yang memenuhi syarat untuk menangani kesalahan, MySQL akan memanggil penangan yang paling spesifik untuk menangani kesalahan terlebih dahulu Error selalu dipetakan ke satu kode error MySQL karena di MySQL ini adalah yang paling spesifik. An Berdasarkan aturan prioritas penangan, penangan kode kesalahan MySQL, penangan Misalkan kita mendeklarasikan tiga penangan dalam
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 DELIMITER $$
BUAT PROSEDUR insert_article_tags_3(IN article_id INT, IN tag_id INT) MULAI
DECLAREEXITHANDLERFOR 1062SELECT'Kesalahan kunci duplikat ditemukan'; DECLAREEXITHANDLERFORSQLEXCEPTIONSELECT'SQLException ditemui'; DECLAREEXITHANDLERFORSQLSTATE'23000'SELECT'SQLSTATE 23000';
-- masukkan record baru ke dalam article_tags INSERTINTO article_tags(article_id,tag_id) NILAI(id_artikel,id_tag);
-- kembalikan jumlah tag untuk artikel tersebut SELECT COUNT(*)FROM article_tags; AKHIR Kami mencoba memasukkan kunci duplikat ke dalam tabel
1 CALL insert_article_tags_3(1,3); Seperti yang Anda lihat, penangan kode kesalahan MySQL dipanggil Menggunakan kondisi kesalahan bernamaMari kita mulai dengan deklarasi penangan kesalahan
1 2 DECLARE EXIT HANDLER UNTUK 1051 SELECT 'Please create table abc first'; PILIH * DARI abc; Apa arti angka 1051 sebenarnya? Untungnya, MySQL memberi kita pernyataan Sintaks pernyataan
1 DECLARE condition_name CONDITION FOR condition_value;
Setelah deklarasi, kami dapat merujuk ke Jadi kita bisa menulis ulang kode di atas sebagai berikut
1 2 3 DECLARE table_not_found KONDISI untuk 1051; DECLARE EXIT HANDLER UNTUK table_not_found SELECT 'Please create table abc first'; PILIH * DARI abc; Kode ini jelas lebih mudah dibaca daripada yang sebelumnya Perhatikan bahwa deklarasi kondisi harus muncul sebelum deklarasi handler atau kursor Apa yang Tidak Membunuhku Membuatku Lebih Kuat
上一篇: STL 下一篇:日期和时间 提问和评论都可以,用心的回复会被更多人看到 评论 发布评论 全部评论 () 最热 最新 相关文章
|