MySQL - RESIGNAL Statement: A Comprehensive Guide for Beginners

Halo teman-teman pemula pengembang MySQL! Hari ini, kita akan mendalami aspek menarik dari penanganan kesalahan MySQL: pernyataan RESIGNAL. Jangan khawatir jika Anda baru saja memulai programming; saya akan menjelaskannya langkah demi langkah, sama seperti yang saya lakukan untuk ribuan murid dalam tahunajaran pengajaran saya. Jadi, ambil secangkir kopi (atau teh, jika itu hal Anda), dan mari kita mulai perjalanan belajar ini bersama!

MySQL - Resignal

What is the RESIGNAL Statement?

Sebelum kita melompat ke hal yang mendalam, mari kita mengerti apa itu RESIGNAL. Bayangkan Anda bermain permainan jagung panas, tapi bukan jagung, melainkan pesan kesalahan. Itu sebenarnya apa yang dilakukan RESIGNAL di MySQL - itu memungkinkan Anda untuk menangkap kesalahan dan kemudian melemparkan kembali, mungkin dengan beberapa modifikasi.

The Basics of RESIGNAL

Perintah RESIGNAL digunakan dalam penanganan kesalahan untuk mempropagasi kondisi kesalahan. Itu seperti mengatakan, "Hey, saya menangkap kesalahan ini, tapi saya ingin melemparkannya kembali dengan beberapa informasi tambahan."

Ini adalah sintaksis dasar:

RESIGNAL [condition_value]
[SET signal_information_item
[, signal_information_item] ...]

mari kitauraikan ini:

  • condition_value: Ini opsional. Itu bisa adalah nilai SQLSTATE, nama kondisi, atau kondisi bernama yang didefinisikan dengan DECLARE ... CONDITION.
  • SET: Klause ini memungkinkan Anda untuk memodifikasi informasi kesalahan.
  • signal_information_item: Ini adalah item yang Anda dapat menetapkan, seperti MESSAGE_TEXT, MYSQL_ERRNO, dll.

Handling Warnings with RESIGNAL

Sekarang, mari kita meraba-raba beberapa contoh kode. Kita akan mulai dengan sebuah scenario sederhana di mana kita tangkap peringatan dan melemparkan kembali dengan informasi tambahan.

DELIMITER //

CREATE PROCEDURE divide_numbers(IN numerator INT, IN denominator INT)
BEGIN
DECLARE EXIT HANDLER FOR SQLWARNING
BEGIN
GET DIAGNOSTICS CONDITION 1 @sqlstate = RETURNED_SQLSTATE, @errno = MYSQL_ERRNO, @text = MESSAGE_TEXT;
SET @full_error = CONCAT('Error ', @errno, ' (', @sqlstate, '): ', @text);
RESIGNAL SET MESSAGE_TEXT = @full_error;
END;

SELECT numerator / denominator;
END //

DELIMITER ;

mari kitauraikan ini:

  1. Kita membuat sebuah procedure yang disebut divide_numbers yang menerima dua parameter.
  2. Kita deklarasikan penanganan keluar untuk SQLWARNING. Ini menangkap setiap peringatan yang terjadi.
  3. Di dalam penangan, kita gunakan GET DIAGNOSTICS untuk mengambil informasi tentang peringatan.
  4. Kita gabungkan informasi ini menjadi pesan kesalahan lengkap.
  5. Akhirnya, kita gunakan RESIGNAL untuk melemparkan pesan kesalahan ini yang lebih informatif.

Untuk menguji ini, Anda dapat menjalankan:

CALL divide_numbers(10, 0);

Anda akan mendapat pesan kesalahan detil daripada peringatan pembagian nol umum. Keren, kan?

Advanced RESIGNAL Usage

Mari kita tingkatkan dengan contoh yang lebih kompleks. Kita akan membuat sebuah procedure yang memeriksa umur pengguna dan menggunakan RESIGNAL untuk memberikan pesan kesalahan khusus.

DELIMITER //

CREATE PROCEDURE check_age(IN user_age INT)
BEGIN
DECLARE EXIT HANDLER FOR SQLEXCEPTION
BEGIN
GET DIAGNOSTICS CONDITION 1 @sqlstate = RETURNED_SQLSTATE, @errno = MYSQL_ERRNO, @text = MESSAGE_TEXT;

IF @errno = 45000 THEN
CASE
WHEN user_age < 0 THEN
RESIGNAL SET MESSAGE_TEXT = 'Error: Age cannot be negative!';
WHEN user_age > 120 THEN
RESIGNAL SET MESSAGE_TEXT = 'Error: Age seems unrealistically high!';
ELSE
RESIGNAL SET MESSAGE_TEXT = 'Error: Invalid age input!';
END CASE;
ELSE
RESIGNAL;
END IF;
END;

IF user_age < 0 OR user_age > 120 THEN
SIGNAL SQLSTATE '45000'
SET MESSAGE_TEXT = 'Invalid age input';
END IF;

SELECT CONCAT('User age: ', user_age, ' is valid.') AS result;
END //

DELIMITER ;

Contoh ini menunjukkan:

  1. Penanganan kesalahan khusus berdasarkan kondisi tertentu.
  2. Penggunaan SIGNAL untuk mengirim kesalahan khusus.
  3. RESIGNAL dengan logika bersyarat untuk memberikan pesan kesalahan yang lebih spesifik.

Anda dapat menguji procedure ini dengan berbagai input:

CALL check_age(25);  -- Umur valid
CALL check_age(-5);  -- Kesalahan umur negatif
CALL check_age(150); -- Kesalahan umur yang tidak realistis tinggi

Resignal Statement Using Client Program

Sekarang, mari kita lihat bagaimana kita dapat menggunakan RESIGNAL dalam program klien. Untuk contoh ini, kita akan menggunakan Python dengan library MySQL Connector.

import mysql.connector
from mysql.connector import Error

def check_user_age(age):
try:
connection = mysql.connector.connect(
host='localhost',
database='your_database',
',
user='your_username',
password='your_password'
)

cursor = connection.cursor()
cursor.callproc('check_age', [age])

for result in cursor.stored_results():
print(result.fetchall())

except Error as e:
print(f"Error: {e}")

finally:
if connection.is_connected():
cursor.close()
connection.close()

# Test the function
check_user_age(25)  # Valid age
check_user_age(-5)  # Negative age error
check_user_age(150) # Unrealistically high age error

Skrip Python ini:

  1. Menghubungkan ke database MySQL.
  2. Memanggil procedure check_age dengan berbagai input.
  3. Menampilkan hasil atau pesan kesalahan.

Conclusion

Dan di sana Anda punya nya, teman-teman! Kita telah berpergian melalui dunia pernyataan RESIGNAL MySQL. Dari penggunaan dasar ke situasi yang lebih kompleks, Anda sekarang memiliki alat untuk menangani kesalahan dan peringatan seperti seorang profesional.

Ingat, penanganan kesalahan adalah seperti menjadi seorang detektif baik - itu tentang mengumpulkan informasi dan meneruskannya dalam cara yang membantu untuk memecahkan misteri (atau dalam kasus kita, meng debug kode).

Tetap latih, stay curious, dan jangan takut membuat kesalahan. Setelah semuanya, itu adalah cara kita belajar dan tumbuh sebagai pemrogram. Selamat coding!

Method Description
RESIGNAL Propagates an error condition
GET DIAGNOSTICS Retrieves error or warning information
SIGNAL Raises a custom error or warning
DECLARE ... HANDLER Defines an error handler
SET Used with RESIGNAL to modify error information

Credits: Image by storyset