2017-11-25 263 views
1

我從here複製的代碼,並做出最小的變化如何將包含逗號的字符串(VARCHAR)傳遞給存儲過程?

DELIMITER $$ 
CREATE PROCEDURE updateTable (IN list_of_ids VARCHAR(32)) 
BEGIN 
    set @sql = concat("SELECT (" , list_of_ids, ")"); 

    PREPARE stmt FROM @sql; 
    EXECUTE stmt; 
END$$ 

call updateTable('1,2,3'); 

但是,當我打電話,我得到Error 1241: Operand should have one 1 column(s)

我用"代替'周圍的參數,它仍然給了同樣的錯誤。我也嘗試用"1,2,3"字符串聲明一個變量,但它仍然失敗,我試圖call updateTable(concat("1,","2,","3"));無濟於事。

我也試圖改變程序,預計3個參數,我得到了預期的錯誤Error 1318: Incorrect number of arguments


這一切正在做的MySql如果有人知道我錯過了,謝謝!我一直在Google上搜索答案。

回答

0
SET @sql = CONCAT("SELECT (" , list_of_ids, ")"); 

爲什麼在這行代碼中需要這些內部括號?這是你遇到問題的地方。 但是,如果你想要這些數字作爲過程本身的字符串,那麼代碼是正確的,但你已經錯誤地傳遞了值。它應該通過如下。

CALL updateTable('\'1,2,3\''); OR 
CALL updateTable("'1,2,3'"); 

讓我知道是否有任何問題?

該示例是正確的,它有更新語句,但您有一個選擇語句。所不同的是你的代碼的結果:

select (1,2,3) 

在「(」這種情況下的意義超出範圍

和你的榜樣會像

update table1 SET ..... where id in (1,2,3); 

這是正確的

+0

感謝您的澄清,但現在我迷失在我想達到的目標中 此代碼現在生成一列「'1','2','3'」和一行「'1」 '2','3'「,我想要一個桌面智慧h一列「姓名」和三行。 我想插入多個值到表中,我想從參數中獲取這些值。因此,我需要在運行時創建一個表,並在表的每一行中使用「數組」中的值。 編輯:我不能在評論中表。 – Mendess

+0

意味着您需要三列中的數據,即一列。 1 2和3在不同行中的值?或者你想根據傳遞的ID來選擇結果? –

+0

我想要一列和三行數據。 – Mendess

相關問題