2017-04-26 18 views
0

我有一個存儲過程,它執行的操作是select。真正的情況要複雜得多,但假設我設法使用CONCAT來創建動態查詢,所以我最終得到了一個有效的查詢字符串,該字符串被準備好執行。這個例子說明吧:使用CONCAT生成的字符串在存儲過程中使用CONCAT_WS()將兩列合併爲一列

DELIMITER ;; 
DROP PROCEDURE IF EXISTS tmp;; 
CREATE PROCEDURE tmp() 
BEGIN 

SET @sql = ''; 
SET @sql = CONCAT('SELECT 
         ib.visit_id, 
         ib.visit_child 
        FROM 
         infoBase ib 
        GROUP BY 
         visit_id, visit_child'); 

PREPARE stmt FROM @sql; 
EXECUTE stmt; 
DEALLOCATE PREPARE stmt; 

END;; 
DELIMITER ; 

我得到預期的結果沒有問題:

╔══════════╦═════════════╗ 
║ visit_id ║ visit_child ║ 
╠══════════╬═════════════╣ 
║ 121340 ║  104280 ║ 
║ 121341 ║  114447 ║ 
║ 121485 ║  114190 ║ 
╚══════════╩═════════════╝ 

現在,我想有一個與其他兩個這樣的連接值第三列:

╔══════════╦═════════════╦══════════════╗ 
║ visit_id ║ visit_child ║ combined ║ 
╠══════════╬═════════════╬══════════════╣ 
║ 121340 ║  104280 ║ 121340104280 ║ 
║ 121341 ║  114447 ║ 121341114447 ║ 
║ 121485 ║  114190 ║ 121485114190 ║ 
╚══════════╩═════════════╩══════════════╝ 

我添加CONCAT_WS做到這一點:

DELIMITER ;; 
DROP PROCEDURE IF EXISTS tmp;; 
CREATE PROCEDURE tmp() 
BEGIN 

SET @sql = ''; 
SET @sql = CONCAT('SELECT 
         ib.visit_id, 
         ib.visit_child, 
         CONCAT_WS('', ib.visit_id, ib.visit_child) AS combined 
        FROM 
         infoBase ib 
        GROUP BY 
         visit_id, visit_child'); 

PREPARE stmt FROM @sql; 
EXECUTE stmt; 
DEALLOCATE PREPARE stmt; 

END;; 
DELIMITER ; 

但我得到了一個Error Code: 1064,如果我嘗試這樣做時,我call myDB.tmp(); 如果我跑我SELECT聲明,因爲它上面顯示沒有存儲過程,它正是我需要的,所以我敢肯定這個問題依賴在嵌套CONCAT(CONCAT_WS()),但我不知道如何得到我所需要的。

這似乎很容易!讓我看看你的知識人! 在此先感謝!

回答

1

的問題是單引號:

行:

'... CONCAT_WS('', ib.visit_id, ib.visit_child) ...' 

將被翻譯爲:

'... CONCAT_WS(', ib.visit_id, ib.visit_child) ...' 

必須逃脫單引號:

SET @sql = CONCAT('SELECT 
         ib.visit_id, 
         ib.visit_child, 
         CONCAT_WS(\'\', ib.visit_id, ib.visit_child) AS combined 
        FROM 
         infoBase ib 
        GROUP BY 
         visit_id, visit_child'); 

您也可以使用:

'... CONCAT_WS('''', ...' 
+0

SO BASIC = /我感到慚愧u.u我只是沒有注意到!我覺得現在很noob現在哈哈http://cdn.memegenerator.net/instances/400x/36108870.jpg謝謝! – Metafaniel

相關問題