Penanganan pengecualian dalam contoh mysql

Ringkasan. tutorial ini menunjukkan cara menggunakan penangan MySQL untuk menangani pengecualian atau kesalahan yang ditemui dalam prosedur tersimpan

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 penangan

Untuk mendeklarasikan penangan, gunakan pernyataan  DECLARE HANDLER sebagai berikut

 

1

DECLARE action HANDLER FOR pernyataan condition_value;

Jika suatu kondisi yang nilainya cocok dengan  condition_value , MySQL akan mengeksekusi statementdan melanjutkan atau keluar dari blok kode saat ini berdasarkan pada action

action_ menerima salah satu dari nilai berikut

  • CONTINUE. eksekusi blok kode terlampir ( BEGIN … END ) berlanjut
  • EXIT_. eksekusi blok kode terlampir, di mana handler dideklarasikan, berakhir

  condition_value menentukan kondisi tertentu atau kelas kondisi yang mengaktifkan penangan.   condition_value menerima salah satu dari nilai berikut

  • Kode kesalahan MySQL
  • Nilai condition_value_1 standar. Atau dapat berupa condition_value2 , condition_value3 atau condition_value4kondisi, yang merupakan kependekan dari kelas nilai condition_value1. Ketentuan condition_value_3 digunakan untuk pernyataan kursor atau  condition_value
  • Kondisi bernama yang terkait dengan kode error MySQL atau nilai condition_value1

 statement_ dapat berupa pernyataan sederhana atau pernyataan majemuk yang diapit oleh ______________ dan _______________ kata kunci

Contoh penanganan kesalahan MySQL

Mari kita lihat beberapa contoh mendeklarasikan penangan

Handler berikut berarti bahwa jika terjadi error, tetapkan nilai variabel  statement2 ke 1 dan lanjutkan eksekusi

 

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 dalamstatement3 blok prosedur tersimpan, prosedur tersimpan akan segera dihentikan

 

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  statement4 ke 1 dan lanjutkan eksekusi

 

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 tersimpan

Pertama, kita membuat tabel baru bernama  statement5 untuk demonstrasi

 

1

2

3

4

5

BUAT TABEL article_tags(

artikel_id INT,

tag_id     INT,

KUNCI UTAMA(article_id,tag_id)

);

Tabel  statement5 menyimpan hubungan antara artikel dan tag. Setiap artikel mungkin memiliki banyak tag dan sebaliknya. Demi kesederhanaan, kami tidak membuat statement7 dan statement8tabel, serta kunci asing di  statement5 tabel

Selanjutnya, kita membuat stored procedure yang menyisipkan article id dan tag id ke tabel statement5

 

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 action1  sebagai berikut

 

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 CONTINUE penangan, prosedur tersimpan melanjutkan eksekusi. Hasilnya, kami juga mendapatkan jumlah tag untuk artikel tersebut

Penanganan pengecualian dalam contoh mysql

Jika kami mengubah CONTINUE dalam pernyataan penangan menjadi EXIT , kami hanya akan mendapatkan pesan kesalahan

 

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);

 

Penanganan pengecualian dalam contoh mysql

Prioritas penangan MySQL

Jika 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. Ancondition_value1 mungkin memetakan ke banyak kode kesalahan MySQL sehingga kurang spesifik. An action6or an condition_value2 adalah singkatan untuk kelas nilai action8 jadi ini adalah yang paling umum

Berdasarkan aturan prioritas penangan, penangan kode kesalahan MySQL, penangan condition_value1, dancondition_value4, mengambil prioritas pertama, kedua, dan ketiga

Misalkan kita mendeklarasikan tiga penangan dalam  action1 prosedur tersimpan sebagai berikut

 

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 action2 dengan memanggil stored procedure

 

1

CALL insert_article_tags_3(1,3);

Seperti yang Anda lihat, penangan kode kesalahan MySQL dipanggil

Penanganan pengecualian dalam contoh mysql

Menggunakan kondisi kesalahan bernama

Mari 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 action_3 yang mendeklarasikan kondisi kesalahan bernama, yang terkait dengan kondisi

Sintaks pernyataan action3 adalah sebagai berikut

 

1

DECLARE condition_name CONDITION FOR condition_value;

condition_value  dapat berupa kode error MySQL seperti 1015 atau nilai condition_value1 . condition_value_ diwakili oleh action8

Setelah deklarasi, kami dapat merujuk ke action8  bukan condition_value

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

下一篇:日期和时间

Penanganan pengecualian dalam contoh mysql

提问和评论都可以,用心的回复会被更多人看到 评论

发布评论

全部评论 () 最热 最新

相关文章

  • 1. 3 Prosedur Tersimpan VoltDB

    j

  • Beranda / Tutorial Python MySQL / Memanggil Prosedur Tersimpan MySQL dengan Python Memanggil Prosedur Tersimpan MySQL dengan Python

    Jika Anda tidak terbiasa dengan prosedur tersimpan MySQL atau ingin meninjaunya sebagai pengingat, Anda dapat mengikuti tutorial prosedur tersimpan MySQL. Kami akan

    mysql python sed

  • prosedur tersimpan mysql dengan nilai pengembalian

    存储过程的功能非常强大,在某种程度上甚至可以替代业务逻辑层, 接下来就一个小例子来说明,用存储过程插入或更新语句。 1、数据库表结构     所用数据库为Sql Server2008。 2、创建存储过程 (1)实现功能:1)有相同的数据,直接返回(返回值:0); 2)有主键相同,但是数据不同的数据,进行更新处理(返回值:2); 3)没有数据,

    存储 数据库表 return 160 procedures

  • Mengapa Prosedur Tersimpan?

    http. // www. w3resource. com/mysql/mysql-prosedur. php Prosedur tersimpan cepat. Server MySQL mengambil beberapa keuntungan dari caching, seperti pernyataan yang disiapkan

    mysql sql php java

  • Fasih Nhibernasi dan Prosedur Tersimpan

    DROP TABLE DepartmentGOCREATE TABLE Department( Id INT IDENTITY(1,1) PRIMARY KEY, DepName VARCHAR(50), PhoneNumber VARCHAR(50))PROSEDUR GOCREATE [dbo]. [GetDepartmentId] ( @Id INT )AS

    hibernasi Nhibernasi Lancar sql hibernasi 存储过程

  • Mysql:FAQ:A. 4 Prosedur dan Fungsi Tersimpan

    SEBUAH. 4 MySQL 5. 7 Tanya Jawab. Prosedur dan Fungsi Tersimpan. 4. 1. Apakah MySQL5. 7 mendukung prosedur dan fungsi tersimpan? . 4. 2. Di mana saya dapat menemukan dokumentasi untuk prosedur tersimpan MySQL dan sto

    mysql ide sed sql php

  • Prosedur tersimpan yang diperpanjang dan tidak berdokumen yang berguna

    Prosedur tersimpan yang diperluas (xp) adalah pustaka tautan dinamis yang berjalan langsung di ruang alamat SQL Server dan diprogram menggunakan SQL Server Open Data Services API. Anda dapat menjalankan prosedur tersimpan yang diperluas dari Query Analyzer, misalnya, seperti yang Anda lakukan pada prosedur tersimpan normal. Mantan

    sql sed ide microsoft c++

  • Prosedur Penyimpanan SQL Server untuk Pemula

    tautan. http. // www. sql-server-kinerja. com/articles/dba/stored_procedures_basics_p1. aspxSQL Server Stored Procedures for BeginnersBy. Tom O'NeillSep 29, 2003Belajar sesuatu yang baru adalah ch

    职场 SQL 数据库 休闲

  • Membuat prosedur tersimpan recurive di T-SQL

    Di SQLServer, saya mencoba mendefinisikan prosedur tersimpan untuk memanggil dirinya sendiri secara rekursif (Lihat pernyataan T-SQL berikut). Namun, tingkat rekursi bersarang maksimum adalah 30 (Diuji di bawah SQL Server 200

    sql

  • [转]Oracle Stored Procedures Halo Dunia Contoh

    ​Daftar contoh cepat untuk membuat prosedur tersimpan (IN, OUT, IN OUT dan parameter Cursor) di database Oracle. Kode PL/SQL cukup jelas. 1. Hello WorldSebuah stored procedure untuk mencetak “Hello Wo

    oracle sql html

  • Kursus Singkat MySQL #15# Bab 23. Bekerja dengan Prosedur Tersimpan

    以前写过类似的东西,用来自动生成数据。 你可以将 Stored Procedure 理解为可以重复使用的批处理文件。 Stored Procedure 非常有用,我们应该尽可能地去使用它。 那么,应用 Stored Procedure 有什么好处呢? 封装过程,简化复杂的操作 代码重用、共用,所有人

    存储过程 mysql 分隔符 自动生成 命令行

  • sql. MySQL dan Microsoft SQL Server Stored Procedure IN, OUT menggunakan kode csharp

    MySQL存储过程. #插入一条返回值DELIMITER $$DROP PROCEDURE IF EXISTS `geovindu`. `proc_Insert_BookKindOut` $$BUAT PROSEDUR `geovindu`. `proc_Insert_BookKindOut` (IN param1Name NVarChar(1000),IN param1Paren

    Mysql csharp SQL Server sql mysql

  • [转]How to. Jalankan Prosedur Tersimpan Oracle Mengembalikan RefCursors

    本文转自:http. // www. telerik. com/help/openaccess-orm/openaccess-tasks-Oracle-execute-sp-result-set. html Dalam topik ini Anda akan mempelajari caranya

    peramal . net sed c# sql

  • PROSEDUR TERSIMPAN. GOOD OR BAD(存储过程:好还是坏)

    Penulis Tanggal Penyerahan Tingkat Pengguna

    sql ide . net 存储过程 数据库

  • stream系列 -- Cara menggunakan prosedur tersimpan DBMS_STRAMS_AMD

    Sumber Informasi Umum{ORACLE_HOME}/rdbms/admin/dbmsstr. sqlPertama Tersedia9. 2ConstantsNameData TypeValueInstantiation Constantsinstantiation_noneBINARY_INTEGER0instantiation_tableBINARY_INTEGER1ins

    oracle aliran dbms_streams_adm

  • Tinjau Penanganan Kesalahan

    Tinjau Penanganan Kesalahan0. Aturan Umum - Kita harus lebih memperhatikan penggunaan tegas dan menjadikannya bagian dari mekanisme penanganan kesalahan/pengecualian. -Perhatian. 异常是first-class的语言机制。代码分析工具可以识别出异常并进行各种监测或分

    c++ c# ide 代码分析 . bersih

  • OAF—Penanganan Kesalahan

    OAF提供了三种类型的Exception. 1. Pengecualian Umum. Kelas. peramal. aplikasi. temukan. kerangka. OAException提供了在运行时刻同时显示多种类型异常的手段,结合EBS的Message Dictionary,可显示有用的消息。2. Pengecualian Validasi. Kelas. peramal. aplikasi. temukan. f

    oracle 职场 休闲 Exception

  • Penanganan Kesalahan WCF

    https. //dokumen. microsoft. com/en-us/dotnet/framework/wcf/wcf-error-handling Kesalahan yang ditemui oleh aplikasi WCF milik salah satu dari tiga kelompok. Bersama

    sed microsoft 学习

  • penanganan kesalahan di Nodejs

    Jika saya hanya membuang pengecualian. ``` aplikasi javascript. get('/error', (request, response) => { throw new Error('Jerry oops')});```Kemudian. > Kesalahan. Jerry oops di aplikasi. dapatkan (C. \Kode\git\pr

    Bagaimana cara menangani pengecualian di MySQL?

    MySQL menyediakan penangan untuk menangani pengecualian dalam prosedur tersimpan. Anda dapat menangani pengecualian ini dengan mendeklarasikan penangan menggunakan MySQL DECLARE. Pernyataan PENANGAN .

    Bagaimana cara mendeklarasikan pengecualian di MySQL?

    Bentuknya bisa sebagai berikut. mysql_error_code. Literal bilangan bulat yang menunjukkan kode kesalahan MySQL, seperti 1051 untuk menentukan "tabel tidak dikenal". DECLARE CONTINUE HANDLER FOR 1051 BEGIN -- body of handler END ; .

    Apa itu SQLException di MySQL?

    Untuk kondisi SQLEXCEPTION, program yang disimpan berakhir pada pernyataan yang menaikkan kondisi, seolah-olah ada penangan EXIT . Jika program dipanggil oleh program tersimpan lain, program pemanggil menangani kondisi menggunakan aturan pemilihan penangan yang diterapkan pada penangannya sendiri.

    Bagaimana penanganan Pengecualian dilakukan di SQL?

    Seperti C#, SQL Server juga memiliki model pengecualian untuk menangani pengecualian dan kesalahan yang terjadi dalam pernyataan T-SQL. Untuk menangani pengecualian di Sql Server kami memiliki TRY. CATCH memblokir . Kami menempatkan pernyataan T-SQL di blok TRY dan untuk menangani pengecualian kami menulis kode di blok CATCH.