2016-12-28 88 views
1


有沒有辦法在MySQL中的一個SELECT查詢中設置多個變量?

大家好。

在我的SP中,有一個像這樣的SELECT查詢。

SELECT val_01, val_02 INTO var_01, var_02 FROM table_name WHERE col_name = condition_01; 

此查詢正常工作。

但我已經爲SQLWARNING添加了退出處理程序,當上面的SELECT查詢沒有結果時,它會使SQL WARNING如此並停止。

無數據 - 零行獲取,選擇,或加工

我GOOGLE和找到一種方法來解決這個問題。它正在改變這樣的查詢...

SELECT var_01 = val_01, var_02 = val_02 FROM table_name WHERE col_name = condition_01; 

此查詢的工作原理。但是原始查詢和修改後的查詢之間存在差異。

在SP中,原始的不會拋出SELECT查詢的結果。它只是將SELECT查詢的值放入變量中。

但後者會將其SELECT結果與變量的值一起拋出。

所以我調用SP的cpp代碼得到錯誤的值。

我可以改變查詢..

SET var_01 = SELECT val_01 FROM table_name WHERE col_name = condition_01; 

SET var_02 = SELECT val_02 FROM table_name WHERE col_name = condition_01; 

但你也知道,這是非常低效和下面的查詢不起作用。

SET var_01, var_02 = (SELECT val_01, val_02 FROM table_name WHERE col_name = condition_01); 

有沒有一種有效的方法來使原始查詢的結果相同?

請幫幫我。謝謝。

+0

然後在您的退出處理程序中解決此特定情況(例如,如果第一個查詢不返回任何記錄,則不要退出)。 – Shadow

回答

1

如果沒有更多的情況下,目前還不清楚,你問正是,但如果你需要暫時重寫退出處理程序,將您的查詢嵌套到新的作用域中,並使用處理程序清除變量。 (如果在一個循環內部,它們必須被清除,否則如果被賦值,它們仍然包含它們的先前值)。

-- inside existing procedure 
BEGIN -- add this and the handler 
    DECLARE CONTINUE HANDLER FOR NOT FOUND SET var_01 = NULL, var_02 = NULL; 
    SELECT val_01, val_02 INTO var_01, var_02 FROM table_name WHERE col_name = condition_01; 
END; -- add this 
-- procedure continues here 
+1

「臨時覆蓋退出處理程序」對我來說非常新鮮且有用。謝謝!! – passion053

0
SET @var_01 = @var_02 = ''; 
SELECT _val_01, _val_02 INTO @var_01, @var_02 FROM table_name WHERE col_name = condition_01; 

// check whether var_01=='' or length==0 then do what you want 
SELECT @var_01, @var_02 
// or 
SELECT LENGTH(@var_01) 
+1

你正在使用的用戶變量不是本地變量 –

+0

@ Milor8,你的解決方案的重點是驗證檢查不是語法。好的,謝謝你的建議。 – passion053

0

選擇A,B INTO AA,BB ...

參考:見INTOhttps://dev.mysql.com/doc/refman/5.7/en/select.html

+0

我的查詢使用「SELECT value_01,value_02 INTO var_01,var_02 ...」查詢。正如我所提到的,它運行良好,但是如果SELECT沒有結果集,它會產生SQLWARNING。 – passion053

+0

'col_name = condition_01'滿足了嗎? –

+0

當然。如果沒有結果,「SELECT ... INTO」仍會發出警告。 – passion053

相關問題