[英]MYSQL SELECT statement returns null when called inside a Stored Procedure
嗨,我正在嘗試創建一個帶有select語句的簡單過程:
DELIMITER //
CREATE PROCEDURE testProcedure(OUT login_id VARCHAR(30))
BEGIN
SELECT LOGIN_ID INTO login_id FROM USER_REG_MST WHERE USER_MOBILE_NO = 123;
END//
DELIMITER ;
當在過程中被調用時,select滿足條件將獨立返回一個值,但是在存儲過程內部調用select時,它將返回null。
SELECT LOGIN_ID INTO login_id FROM mystrodb.USER_REG_MST WHERE USER_MOBILE_NO = 123;
給我一個價值。 但,
CALL testProcedure(@out);
SELECT @out;
返回NULL。
注意:這些列的類型為VARCHAR(30)(其他信息)
問題是對於MySQL LOGIN_ID
和login_id
是相同的變量,因此不建議將參數和變量命名為數據庫中對象或實體(表,列等)的名稱,請參閱C.1存儲限制。程序::存儲的例程中的名稱沖突 。
有兩個選項:1)更改存儲過程的輸出參數名稱。 2)在LOGIN_ID
列中包含一個限定符,請參閱9.2.1標識符限定符 。
...
SELECT `USER_REG_MST`.`LOGIN_ID` INTO `login_id` ...
...
請參見dbfiddle 。
您需要設置OUT
參數,並確保區分列名和參數名:
DELIMITER //
CREATE PROCEDURE testProcedure(OUT login_id VARCHAR(30))
BEGIN
SET login_id = (SELECT u.LOGIN_ID
FROM USER_REG_MST u WHERE USER_MOBILE_NO = 123);
END//
DELIMITER ;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.