簡體   English   中英

在存儲過程中調用時,MYSQL SELECT語句返回null

[英]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_IDlogin_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 ;

DBFiddle演示

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM