我正在研究這個使用資料庫的專案,并且我在 MySQL tba_instruments中創建了一個表。它具有每個儀器的 ID 和名稱。是這樣的:
| INSTRUMENT_ID | INSTRUMENT_NM |
| -------- | -------- |
| 1 | Violin |
| 2 | Cello |
| 3 | Flute |
| 4 | Trumpet |
為了通過某個過濾器獲得儀器,我撰寫了這個存盤程序
DELIMITER //
CREATE PROCEDURE GetInstruments_ByFilter(
IN instrument_id INT,
IN instrument_name VARCHAR(255)
)
BEGIN
SELECT * FROM tba_instrument
WHERE ID_INSTRUMENT = instrument_id
AND INSTRUMENT_NM = instrument_name;
END //
DELIMITER ;
CALL GetInstruments_ByFilter(1, 'Violin');
結果:
| INSTRUMENT_ID | INSTRUMENT_NM |
| 1 | Violin |
如果通過的引數匹配表中的內容,它就可以正常作業。但是如果一個引數為空,我希望它的行為有所不同,例如:
CALL GetInstruments_ByFilter('Violin');
它列印一條錯誤訊息,因為缺少一個引數。我希望它只顯示整個表格而不是錯誤訊息。有沒有辦法在 MySQL 中做到這一點?
到目前為止,我認為只是為這種特殊情況創建一個不同的存盤程序,但它看起來并不是最好的解決方案。
uj5u.com熱心網友回復:
您可以利用 IFNULL 函式。
DELIMITER //
CREATE PROCEDURE GetInstruments_ByFilter(
instrument_id INT,
instrument_name VARCHAR(255)
)
BEGIN
SELECT *
FROM tba_instrument
WHERE ID_INSTRUMENT = IFNULL(instrument_id, ID_INSTRUMENT)
AND INSTRUMENT_NM = IFNULL(instrument_name, INSTRUMENT_NM);
END //
DELIMITER ;
CALL GetInstruments_ByFilter(1, 'Violin');
CALL GetInstruments_ByFilter(1, NULL);
CALL GetInstruments_ByFilter(NULL, 'Violin');
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/521032.html
標籤:mysql存储过程
上一篇:包含布林值的訂購表
下一篇:如何獲得表中的兩個最大值?
