我有一个像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客户端中不起作用。我一直收到语法错误。
答案 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