Penanganan pengecualian dalam prosedur tersimpan mysql

Dalam posting ini, saya membagikan demonstrasi lengkap tentang cara mengelola penanganan error/exception di Stored Procedure MySQL

Setiap kali pengecualian terjadi dalam prosedur tersimpan, sangat penting untuk menanganinya dengan menunjukkan pesan kesalahan yang tepat

Jika Anda tidak menangani pengecualian, akan ada peluang untuk menggagalkan aplikasi dengan pengecualian tertentu dalam prosedur tersimpan

Jika Anda mendapatkan kesalahan dalam prosedur tersimpan, alih-alih keluar, Anda harus melanjutkan tanpa pesan kesalahan. Itu berarti Anda dapat menampilkan kode atau pesan kesalahan default atau kustom apa pun ke aplikasi/pengguna

MySQL menyediakan Handler untuk menangani pengecualian dalam prosedur tersimpan

Di bawah ini adalah demonstrasi lengkap dari handler dengan contoh

1

2

3

4

5

6

7

8

9

10

/*Buat database karyawan untuk demo */

BUAT DATABASE Karyawan;

/*Buat contoh tabel EmployeeDetails. */

BUAT TABEL Karyawan. tbl_Detail Karyawan

(

EmpID INTEGER

,EmpName VARCHAR(50)

,AlamatEmail VARCHAR(50)

,CONSTRAINT pk_tbl_EmployeeDetails_EmpID PRIMARY KEY (EmpID)

)ENGINE = InnoDB;

Cara mendeklarasikan handler di store procedure

Sintaks Handler.

1

DECLARE handler_action HANDLER UNTUK condition_value. penyataan

Tiga jenis Handler_Action

  • MELANJUTKAN
  • KELUAR
  • MEMBUKA

Jenis Nilai Kondisi

  • mysql_error_code
  • sqlstate_value
  • Peringatan SQL
  • SQLException
  • Tidak ditemukan

Bagaimana cara menulis handler dalam prosedur tersimpan?

E. g

1

2

3

4

DECLARE CONTINUE HANDLER UNTUK SQLEXCEPTION SELECT 'Terjadi kesalahan';

DECLARE CONTINUE HANDLER UNTUK SET SQLEXCEPTION IsError=1;

DECLARE EXIT HANDLER UNTUK SET SQLEXCEPTION IsError=1;

DECLARE EXIT HANDLER UNTUK SET SQLSTATE '23000' IsError = 1;

Di atas adalah empat contoh penangan yang berbeda. Sekarang, saya akan memasukkan nilai duplikat ke dalam kolom EmpID

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

DELIMITER //

BUAT PROSEDUR Karyawan. usp_InsertEmployeeDetails

(

InputEmpID INTEGER

,InputEmpName VARCHAR(50)

,InputEmailAddress VARCHAR(50)

)

/***************************************************

Nama Penulis. Anvesh Patel

Tanggal Dibuat. 20-05-2015

Keterangan. Ini adalah prosedur tersimpan demo untuk

masukkan record ke dalam tabel dengan tepat

penanganan kesalahan. Pada dasarnya untuk www. dbrand. pembaca com

****************************************************

MULAI

DECLARE CONTINUE HANDLER UNTUK SQLEXCEPTION SELECT 'Terjadi kesalahan';

INSERT INTO Karyawan. tbl_Detail Karyawan

(

EmpID

,EmpName

,Alamat email

)

NILAI

(

InputEmpID

,InputEmpName

,MasukanAlamatEmail

);

PILIH *DARI Karyawan. tbl_Detail Karyawan;

AKHIR

// PEMBATAS ;

Di SP di atas, saya mendefinisikan penangan LANJUTKAN dengan pesan pengecualian khusus saya

Sekarang, panggil SP di atas dua kali dengan EmpID yang sama

Pertama kali, itu akan berhasil dieksekusi, tetapi yang kedua kali akan menampilkan pesan kesalahan khusus

Seperti yang kita definisikan CONTINUE handler, jadi itu hanya akan menampilkan pesan kesalahan dan LANJUTKAN ke bagian selanjutnya dari pernyataan SELECT

Mari kita lihat,

1

2

PANGGILAN Karyawan. usp_InsertEmployeeDetails (1,'Anvesh','anvesh@gmail. com');

PANGGILAN Karyawan. usp_InsertEmployeeDetails (1,'Roy','Roy@gmail. com');

Di atas adalah dua panggilan berbeda dengan nilai EmpID yang sama. Panggilan pertama dijalankan tanpa pesan kesalahan dan panggilan kedua dijalankan dengan pesan kesalahan

Hasil Panggilan Kedua

Penanganan pengecualian dalam prosedur tersimpan mysql

Penanganan pengecualian dalam prosedur tersimpan mysql

Seperti yang kami definisikan LANJUTKAN, sehingga Anda dapat menemukan dua hasil pada gambar di atas. Salah satunya adalah pesan kesalahan khusus kami dan yang kedua adalah hasil dari pernyataan SELECT yang ditentukan
Eksekusi tidak berhenti karena kesalahan, dan berlanjut ke bagian lain

Sekarang, periksa handler EXIT

Harap ubah penangan Anda dan ganti LANJUTKAN dengan KELUAR

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

DELIMITER //

BUAT PROSEDUR Karyawan. usp_InsertEmployeeDetails

(

InputEmpID INTEGER

,InputEmpName VARCHAR(50)

,InputEmailAddress VARCHAR(50)

)

/***************************************************

Nama Penulis. Anvesh Patel

Tanggal Dibuat. 20-05-2015

Keterangan. Ini adalah prosedur tersimpan demo untuk

masukkan record ke dalam tabel dengan tepat

penanganan kesalahan. Pada dasarnya untuk www. dbrand. pembaca com

****************************************************

MULAI

DECLARE EXIT HANDLER UNTUK SQLEXCEPTION SELECT 'Terjadi kesalahan';

INSERT INTO Karyawan. tbl_Detail Karyawan

(

EmpID

,EmpName

,Alamat email

)

NILAI

(

InputEmpID

,InputEmpName

,MasukanAlamatEmail

);

PILIH *DARI Karyawan. tbl_Detail Karyawan;

AKHIR

// PEMBATAS ;

Panggil dengan parameter yang sama

1

PANGGILAN Karyawan. usp_InsertEmployeeDetails (1,'Roy','Roy@gmail. com');

Hasilnya adalah satu-satunya pesan kesalahan, dan Anda tidak dapat menemukan dua hasil seperti yang kami definisikan KELUAR untuk keluar dari kode saat terjadi kesalahan

Penanganan pengecualian dalam prosedur tersimpan mysql

Praktik terbaik adalah membuat parameter keluaran dan menyimpan 1 jika terjadi kesalahan

Kode aplikasi harus memeriksa parameter keluaran ini adalah NULL atau 1

1 = Kesalahan

NULL = Tidak Ada Kesalahan

Di bawah ini adalah prosedur tersimpan untuk ini

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

DELIMITER //

BUAT PROSEDUR Karyawan. usp_InsertEmployeeDetails

 

(

InputEmpID INTEGER

,InputEmpName VARCHAR(50)

,InputEmailAddress VARCHAR(50)

, keluar IsError INTEGER

)

/***************************************************

Nama Penulis. Anvesh Patel

Tanggal Dibuat. 20-05-2015

Keterangan. Ini adalah prosedur tersimpan demo untuk disisipkan

merekam ke dalam tabel dengan penanganan kesalahan yang tepat

Pada dasarnya untuk www. dbrand. pembaca com

****************************************************

MULAI

DECLARE CONTINUE HANDLER UNTUK SET SQLEXCEPTION IsError=1;

 

INSERT INTO Karyawan. tbl_Detail Karyawan

(

EmpID

,EmpName

,Alamat email

)

NILAI

(

InputEmpID

,InputEmpName

,MasukanAlamatEmail

);

PILIH *DARI Karyawan. tbl_Detail Karyawan;

AKHIR

// PEMBATAS ;

Sekarang panggil SP di atas dan pilih parameter keluaran

1

2

PANGGILAN Karyawan. usp_InsertEmployeeDetails (1,'Roy','Roy@gmail. com',@IsError);

PILIH @IsError;

Sekarang Hasilnya

Penanganan pengecualian dalam prosedur tersimpan mysql

Penanganan pengecualian dalam prosedur tersimpan mysql

Di atas adalah demonstrasi sederhana Penanganan Kesalahan di MySQL. Anda juga dapat menggunakan SQLSTATE yang menampilkan pesan kesalahan default MySQL

21 Mei 2015 Anvesh Patel

Silahkan kunjungi artikel terkait lainnya

  • MySQL. Kode kesalahan 1005 Tidak dapat membuat tabel (errno 150)
  • MySQL. Apa peran utama dari. dari berkas?
  • MySQL. Solusi terbaik untuk menghitung Umur dari Tanggal Lahir
  • Sisipkan-Perbarui, Gabungkan pernyataan di MySQL
  • MySQL. Nilai UDF ke SELECT dari String Terpisah Koma di posisi mana pun
  • Prosedur Tersimpan di MySQL
  • MySQL. Pertanyaan dan Jawaban Wawancara yang Sering Diajukan Bagian 7
  • MySQL. Skrip untuk menemukan nilai AUTO_INCREMENT Terakhir untuk Tabel

Cara membuat pekerjaan di PostgreSQL PostgreSQL XML Type

Komentar. 20

  1. Sunil

    4 Januari 2017 jam 9. 29 pagi

    hai Avnesh saya berjuang dengan DEFINER dalam prosedur tersimpan, dapatkah Anda menyarankan beberapa ide yang lebih baik
    seperti DEFINER adalah =root@% maka saya tidak dapat menjalankan prosedur tersimpan ini dari mysql db lokal saya

    , sebelumnya terima kasih

    • Penanganan pengecualian dalam prosedur tersimpan mysql

      Anvesh Patel

      4 Januari 2017 pukul 7. 16 sore

      Singkirkan. Standarnya ditambahkan dalam prosedur tersimpan Anda

  2. Shubhada Mulay

    30 Januari 2017 pukul 10. 43 pagi

    Hai Anvesh,
    Saya pemula untuk MYSQL. Bisakah Anda menjelaskan lebih detail tentang Bagian Penanganan pengecualian ini?
    Terima kasih banyak sebelumnya
    Salam
    Shubhada

    • Penanganan pengecualian dalam prosedur tersimpan mysql

      Anvesh Patel

      30 Januari 2017 pukul 6. 10 malam

      Tentu, saya akan memperbarui artikel ini dan akan membagikan beberapa tautan lainnya

  3. Victor R. Udeshi

    14 Juli 2017 pukul 7. 03 sore

    HI Anvesh,

    Saya menggunakan penanganan kesalahan dalam proc tersimpan saya dan berfungsi dengan baik. hasilnya menunjukkan saya hanya 1 bidang, kesalahan

    Apa yang saya coba lakukan adalah memanggil proc ke dalam perangkat lunak pelaporan (pentaho). ketika saya memanggil proc di pentaho, itu hanya menunjukkan bidang kesalahan

    apakah ada cara agar semua bidang yang saya inginkan terlihat kosong dan pesan kesalahan jika ada kesalahan?

    • Penanganan pengecualian dalam prosedur tersimpan mysql

      Anvesh Patel

      17 Juli 2017 pukul 8. 14 sore

      Anda dapat mengganti 1 itu dengan NULL

  4. Ravi Kumar Chandran

    25 September 2017 pukul 11. 16 sore

    Anvesh,

    Ini adalah artikel yang ditulis dengan baik dan Anda telah berhasil menjelaskan fitur yang cukup kompleks dengan istilah yang sederhana. terima kasih. itu berguna bagi saya

    • Penanganan pengecualian dalam prosedur tersimpan mysql

      Anvesh Patel

      26 September 2017 pukul 5. 02 siang

      Terima kasih, Ravi…

  5. kaliyappan

    9 November 2017 pukul 5. 53 pagi

    Hai, Permintaan di bawah ini menunjukkan kepada saya “Tidak ada data. 1329 Tidak ada data – nol baris diambil, dipilih, atau diproses”. Tidak dapat memperbaikinya, bisakah Anda membantu saya
    MULAI
    DECLARE from_date DATETIME;
    MENYATAKAN sampai_tanggal DATETIME;
    MENYATAKAN nama host VARCHAR(50);
    MENYATAKAN nama layanan VARCHAR(50);
    MENYATAKAN running_no INT;
    MENYATAKAN loop_no INT;
    MENYATAKAN nilai1 FLOAT;
    MENYATAKAN nilai2 FLOAT;
    MENYATAKAN nilai3 FLOAT;
    MENYATAKAN negara INT;
    DECLARE logdate DATETIME;
    MENYATAKAN prev_status INT;
    MENYATAKAN C1len INT;
    MENYATAKAN c2len INT;
    MENYATAKAN c2flag INT;
    MENYATAKAN IsError INT;
    DECLARE c1 CURSOR UNTUK SELECT host_name sebagai host, service_name sebagai layanan DARI cmp_warehouse. tbl_health_events_csv GROUP BY host_name,service_name ORDER BY host_name, service_name;

    SET running_no = 1;
    BUKA c1;
    atur c1len = (PILIH DITEMUKAN_ROWS());
    l_c1. LINGKARAN

    FETCH c1 INTO hostname,servicename;

    MASUKKAN KE cmp_warehouse. temp_event_data_4 (host, layanan, conelen) NILAI (nama host, nama layanan, c1len);
    SET loop_no=1;

    BLOK2. MULAI
    DECLARE c2 CURSOR UNTUK SELECT val1,val2,val3,status_check sebagai status, event_time sebagai logtime DARI cmp_warehouse. tbl_health_events_csv WHERE host_name = hostname AND service_name = servicename ORDER BY event_time ASC;
    BUKA c2;
    atur c2len = (PILIH DITEMUKAN_ROWS());
    SET c2flag = 1;
    l_c2. LINGKARAN
    FETCH c2 INTO value1,value2,value3,state,logdate;
    MASUKKAN KE cmp_warehouse. temp_event_data_3 (val1, val2, val3, status, logtime,prev_sta,ctwolen,c2flg) NILAI (nilai1,nilai2,nilai3,status,logdate,prev_status,c2len,c2flag);
    JIKA loop_no=1 MAKA
    MASUKKAN KE cmp_warehouse. temp_event_data_2 (row_no, host, service, val1, val2, val3, status, start_time, end_time,dibuat) VALUES (running_no, hostname, servicename, value1, value2, value3, state, logdate, NULL,NOW());
    SET loop_no = loop_no +1;
    SET prev_status = status;
    BERAKHIR JIKA;
    JIKA nyatakan prev_status THEN
    UPDATE cmp_warehouse. temp_event_data_2 SET end_time = logdate WHERE row_no = running_no;
    SET running_no = running_no +1;
    MASUKKAN KE cmp_warehouse. temp_event_data_2 (row_no, host, service, val1, val2, val3, status, start_time, end_time,dibuat) VALUES (running_no, hostname, servicename, value1, value2, value3, state, logdate, NULL,NOW());
    BERAKHIR JIKA;
    SET prev_status = status;
    JIKA c2len = c2flag MAKA
    UPDATE temp_event_data_2 SET end_time = logdate WHERE row_no = running_no;
    SET running_no = running_no + 1;
    TINGGALKAN l_c2;
    BERAKHIR JIKA;
    SET c2flag = c2flag + 1;
    AKHIR LOOP l_c2;
    TUTUP c2;
    BLOK AKHIR2;
    AKHIR LOOP l_c1;
    TUTUP c1;
    AKHIR

    • Penanganan pengecualian dalam prosedur tersimpan mysql

      Anvesh Patel

      9 November 2017 pukul 9. 57 pagi

      Saya pikir ini adalah logika Anda dan tidak terkait dengan posting ini, jika Anda memerlukan bantuan lain, hubungi saya melalui halaman HUBUNGI SAYA. Saya akan mencoba membantu Anda

  6. Sanket Kale

    2 Januari 2018 pukul 7. 46 pagi

    Bagaimana cara mengetahui kesalahan runtime dalam prosedur tersimpan mysql?
    Apakah ada cara untuk mencetak kesalahan yang terjadi saat menjalankan SP?
    Mohon jelaskan dengan sebuah contoh

    Terima kasih sebelumnya

    • Penanganan pengecualian dalam prosedur tersimpan mysql

      Anvesh Patel

      4 Januari 2018 pukul 9. 20 pagi

      Baik akan saya kirim

      • rajesh

        12 Juni 2018 pukul 12. 25 sore

        Hai Anvesh,

        ini rajesh, tolong jelaskan keraguan saya. saya tidak tahu tentang Oracle dan Mysql. jadi saya langsung bergabung dengan Mysql

  7. Arti

    28 Juli 2018 pukul 10. 38 pagi

    berbagi contoh bagus untuk penanganan kesalahan mysql

  8. Ben Oakes

    16 Agustus 2018 pukul 7. 01 pagi

    Ketika datang untuk menangani masalah kueri SQL, ini seringkali lebih mudah diperbaiki daripada masalah PHP murni karena Anda dapat mempersempit posisi kesalahan 0xc0000185

  9. Himanshu

    17 Agustus 2018 pukul 6. 40 pagi

    Hi Avinash,

    bisakah Anda memberi tahu saya, bagaimana kami dapat mencetak pengecualian waktu berjalan

  10. survai shivani

    22 November 2018 pukul 10. 23 pagi

    saat menelepon di atas SP dengan empID saya mendapatkan kesalahan. Pepatah,

    Kesalahan 4052 (42S22). Kolom tidak dikenal 'InputEmpID' di 'daftar bidang'

  11. Edward_abino

    13 Desember 2018 pukul 8. 41 pagi

    MySQL menyediakan cara mudah untuk mendefinisikan penangan yang menangani dari kondisi umum seperti peringatan atau pengecualian hingga kondisi tertentu e. g. , kode kesalahan tertentu

  12. Puneet Papneja

    15 Juni 2019 pukul 8. 00 pagi

    Apakah ada cara untuk menggunakan penanganan kesalahan di dalam transaksi tetapi tidak menggunakan prosedur penyimpanan?

  13. Labonya Das

    26 November 2019 pukul 4. 22 pagi

    Saya ingin menangkap kesalahan DB yang sebenarnya bukan pesan kesalahan yang ditentukan pengguna seperti yang tertulis di sini. Dengan cara yang kami miliki di Oracle dan SQL server, kesalahan DB yang tepat ditangkap ketika terjadi pengecualian. Ada ide tentang ini, silakan bagikan dan terima kasih atas saran Anda sebelumnya

    Bagaimana cara menangani pengecualian dalam prosedur MySQL?

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

    Bagaimana Anda menangani pengecualian dalam prosedur tersimpan?

    Untuk memunculkan pengecualian dalam prosedur tersimpan, gunakan sintaks berikut. Nama PENGECUALIAN; di mana .

    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". .
    SQLSTATE [NILAI] sqlstate_value. Literal string 5 karakter yang menunjukkan nilai SQLSTATE, seperti '42S01' untuk menentukan "tabel tidak dikenal"

    Bagaimana Anda menangani kondisi kesalahan saat menulis prosedur tersimpan atau mengakses prosedur tersimpan dari Java?

    Ketika Anda memanggil stored procedure, itu akan dijalankan di server database jadi jika ada pengecualian terjadi yang dapat ditangani di blok EXCEPTION di stored procedure. Jika prosedur tersimpan itu sendiri gagal, ia melontarkan pengecualian SQL yang dapat ditangani oleh try/catch block dan membungkusnya dengan pengecualian khusus proyek Anda .