查询在工作台中工作,但在mysql客户端中不起作用

时间:2015-10-08 01:22:38

标签: 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;
  

错误1064(42000):您的SQL语法有错误;检查   手册,对应右边的MySQL服务器版本   要在''附近使用的语法在第1行

但是,它在MySQL客户端中不起作用。我一直收到语法错误。

2 个答案:

答案 0 :(得分: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;

我刚重新安排了一段代码并在最后添加了一个分号(;)。 它对我有用。

答案 1 :(得分:0)

避免必须处理mysql客户端引用问题的一种方法是使用here-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