我正在做一个使用数据库的项目,我在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中有办法做到这一点吗?
到目前为止,我所想的只是为这个特定的情况创建一个不同的存储过程,但这看起来并不是最好的解决方案。
1条答案
按热度按时间toiithl61#
您可以利用IFNULL函数。