我有這樣的功能:MySQL存儲函數,如何檢查沒有行並且不會生成警告?
DROP FUNCTION IF EXISTS find_linkid;
DELIMITER //
CREATE FUNCTION `find_linkid`(pc1 VARCHAR(50)
RETURNS INT
BEGIN
DECLARE linkId int;
SELECT a.id INTO linkId FROM PC_A a WHERE a.pc=pc1;
ON
IF linkId IS NULL THEN
SELECT b.id INTO linkId FROM PC_B b WHERE b.pc=pc1;
END IF;
RETURN linkId;
END
//
基本上,運行一個查詢,如果不返回任何東西(的a.id被聲明爲NOT NULL),運行另一個查詢並返回鏈路ID。如果沒有找到,linkId將爲NULL,如果pc1完全沒有找到,則返回NULL。
這工作,但給人的警告,如果第一個查詢不返回任何內容:
select find_linkid('12BD');
+------------------------------+
| find_linkid('12BD') |
+------------------------------+
| 667 |
+------------------------------+
1 row in set, 1 warning (0.00 sec)
mysql> show warnings;
+---------+------+-----------------------------------------------------+
| Level | Code | Message |
+---------+------+-----------------------------------------------------+
| Warning | 1329 | No data - zero rows fetched, selected, or processed |
+---------+------+-----------------------------------------------------+
1 row in set (0.00 sec)
什麼是運行一個查詢的正確方式,如果不返回任何內容,運行另一個查詢?