2015-10-08 103 views
0

我有這樣一個查詢,在MySQL工作臺的工作原理:查詢工作在工作臺但不是在mysql客戶端

mysql> select concat('insert into SE_POPN (POPN_ID,RQST_ID,LOB_CD,POPN_NM,INSRT_DT,INSRT_USER_ID,UPD_DT,UPD_USER_ID) 
values ("',case when POPN_ID is null then '' else POPN_ID end,'","', 
case when RQST_ID is null then '' else RQST_ID end,'","', 
case when LOB_CD is null then '' else LOB_CD end,'","', 
case when POPN_NM is null then '' else POPN_NM end,'","', 
case when INSRT_DT is null then '' else INSRT_DT end,'","', 
case when INSRT_USER_ID is null then '' else INSRT_USER_ID end,'","', 
case when UPD_DT is null then '' else UPD_DT end,'","', 
case when UPD_USER_ID is null then '' else UPD_USER_ID end,'");') 
from se_popn; 

ERROR 1064(42000):你在你的SQL語法錯誤;檢查對應於你的MySQL服務器版本正確的語法 在1號線

使用「」附近的 手動但是,它不會在MySQL客戶端。我不斷收到語法錯誤。

+2

什麼是你得到的語法錯誤? –

+0

請格式化您的查詢,以便它是人類可讀的。 –

+1

請說明您如何試圖在客戶端執行查詢。我懷疑問題在於引用 - 您需要在查詢內部跳過與您在客戶端代碼中使用的引號相匹配的引號。 – Barmar

回答

0

您可能會在最後錯過一個分號(;)。

一條命令不需要在一行中全部給出,因此需要多行的冗長命令 不是問題。 mysql會通過查找終止分號來確定您的語句的末尾 ,而不是通過尋找輸入行的末尾的 。 (換句話說,mysql的接受 自由格式輸入:它收集輸入行但直到看見分號不執行他們 。) Read more on dev.mysql.com

嘗試下面的代碼,

SELECT Concat( 
'insert into SE_POPN (POPN_ID,RQST_ID,LOB_CD,POPN_NM,INSRT_DT,INSRT_USER_ID,UPD_DT,UPD_USER_ID) values ("' 
, CASE 
WHEN popn_id IS NULL THEN '' 
ELSE popn_id 
END, '","', CASE 
       WHEN rqst_id IS NULL THEN '' 
       ELSE rqst_id 
      END, '","', CASE 
          WHEN lob_cd IS NULL THEN '' 
          ELSE lob_cd 
         END, '","', CASE 
             WHEN popn_nm IS NULL THEN '' 
             ELSE popn_nm 
            END, '","', CASE 
                WHEN insrt_dt IS NULL THEN '' 
                ELSE insrt_dt 
               END, '","', CASE 
                   WHEN insrt_user_id IS NULL THEN '' 
                   ELSE insrt_user_id 
                  END, '","', CASE 
                      WHEN upd_dt IS NULL THEN '' 
                      ELSE upd_dt 
                     END, '","', CASE 
                         WHEN upd_user_id IS NULL THEN '' 
                         ELSE upd_user_id 
                        END, '");') 
FROM se_popn; 

我只是重新安排了一個代碼,並在最後添加了一個分號(;)。 它正在爲我工​​作。爲了避免不必處理引用問題與mysql客戶

+0

對不起......我在聲明的末尾使用了一個';'我只是做了一個編輯,以顯示我在客戶端如何運行它,以及我得到的錯誤......讓我的問題有點更清晰。 – user2061886

0

的一種方法是使用在這裏,DOC,而不是mysql -e

mysql <options> dbname <<EOF 
select concat('insert into SE_POPN (POPN_ID,RQST_ID,LOB_CD,POPN_NM,INSRT_DT,INSRT_USER_ID,UPD_DT,UPD_USER_ID) 
values ("',case when POPN_ID is null then '' else POPN_ID end,'","', 
case when RQST_ID is null then '' else RQST_ID end,'","', 
case when LOB_CD is null then '' else LOB_CD end,'","', 
case when POPN_NM is null then '' else POPN_NM end,'","', 
case when INSRT_DT is null then '' else INSRT_DT end,'","', 
case when INSRT_USER_ID is null then '' else INSRT_USER_ID end,'","', 
case when UPD_DT is null then '' else UPD_DT end,'","', 
case when UPD_USER_ID is null then '' else UPD_USER_ID end,'");') 
from se_popn; 
EOF 
相關問題