ON DUPLICATE KEY UPDATE 抛出 SQL 错误 ORA-00933:SQL 命令未正确结束
ON DUPLICATE KEY UPDATE throws SQL error ORA-00933: SQL command not properly ended
我有一个 SQL 查询使用 ON DUPLICATE KEY UPDATE 作为:
查询已更新:
MERGE INTO reports rt
USING (SELECT REPORT_ID,TITLE,CATEGORY,DISPLAY_ORDER,QUERY,DESCRIPTION,CONTENT_SEQ,DELD,ADMIN_ID
FROM reports) rs
ON (rt.report_id = rs.report_id)
WHEN MATCHED THEN
UPDATE SET rt.TITLE = 'a',
rt.CATEGORY = 'z',
rt.DISPLAY_ORDER= 9,
rt.QUERY ='q',
rt.DESCRIPTION='d',
rt.CONTENT_SEQ=1,
rt.DELD=0,
rt.ADMIN_ID=1
WHEN NOT MATCHED THEN
INSERT(REPORT_ID,TITLE,CATEGORY,DISPLAY_ORDER,QUERY,DESCRIPTION,CONTENT_SEQ,DELD,ADMIN_ID)
VALUES(27,
'a',
'z',
9,
'q',
'd',
1,
0,
1;
当我 运行 这个查询时它抛出一个错误:SQL Error: ORA-00933: SQL command not properly ended.
P.S : 我正在使用 Oracle 数据库。
是不是不支持'ON DUPLICATE KEY UPDATE'条款?
如果否,实现此目标的其他选择是什么?
I am using Oracle Database.
Is it that it wont support 'ON DUPLICATE KEY UPDATE' clause ? If
No,what is the other option to achieve this ?
可能这是 MySQL 支持的功能。 Oracle 不支持 ON DUPLICATE KEY UPDATE。您需要使用 MERGE 语句。
例如,
MERGE INTO dest_table t
USING (SELECT <column_list>
FROM source_table) s
ON (t.col1 = s.col1) -- use required join keys
WHEN MATCHED THEN
UPDATE SET t.<column_list> = s.<column_list>
...
WHEN NOT MATCHED THEN
INSERT( t.<column_list>)
VALUES( s.<column_list>)
阅读文档以获取有关 MERGE. Few examples here 的更多详细信息。
更新 基于编辑问题中 OP 的新查询。
WHEN NOT MATCHED THEN INSERT(REPORT_ID,TITLE,CATEGORY,DISPLAY_ORDER,QUERY,DESCRIPTION,CONTENT_SEQ,DELD,ADMIN_ID)
VALUES(27,
'a',
'z',
9,
'q',
'd',
1,
0,
1;
分号前的末尾缺少右大括号。试试这个:
MERGE INTO reports rt
USING (SELECT report_id,
title,
category,
display_order,
query,
description,
content_seq,
deld,
admin_id
FROM reports) rs
ON (rt.report_id = rs.report_id)
WHEN matched THEN
UPDATE SET rt.title = 'a',
rt.category = 'z',
rt.display_order = 9,
rt.query = 'q',
rt.description = 'd',
rt.content_seq = 1,
rt.deld = 0,
rt.admin_id = 1
WHEN NOT matched THEN
INSERT(report_id,
title,
category,
display_order,
query,
description,
content_seq,
deld,
admin_id)
VALUES(27,
'a',
'z',
9,
'q',
'd',
1,
0,
1);
我有一个 SQL 查询使用 ON DUPLICATE KEY UPDATE 作为:
查询已更新:
MERGE INTO reports rt
USING (SELECT REPORT_ID,TITLE,CATEGORY,DISPLAY_ORDER,QUERY,DESCRIPTION,CONTENT_SEQ,DELD,ADMIN_ID
FROM reports) rs
ON (rt.report_id = rs.report_id)
WHEN MATCHED THEN
UPDATE SET rt.TITLE = 'a',
rt.CATEGORY = 'z',
rt.DISPLAY_ORDER= 9,
rt.QUERY ='q',
rt.DESCRIPTION='d',
rt.CONTENT_SEQ=1,
rt.DELD=0,
rt.ADMIN_ID=1
WHEN NOT MATCHED THEN
INSERT(REPORT_ID,TITLE,CATEGORY,DISPLAY_ORDER,QUERY,DESCRIPTION,CONTENT_SEQ,DELD,ADMIN_ID)
VALUES(27,
'a',
'z',
9,
'q',
'd',
1,
0,
1;
当我 运行 这个查询时它抛出一个错误:SQL Error: ORA-00933: SQL command not properly ended.
P.S : 我正在使用 Oracle 数据库。
是不是不支持'ON DUPLICATE KEY UPDATE'条款? 如果否,实现此目标的其他选择是什么?
I am using Oracle Database.
Is it that it wont support 'ON DUPLICATE KEY UPDATE' clause ? If No,what is the other option to achieve this ?
可能这是 MySQL 支持的功能。 Oracle 不支持 ON DUPLICATE KEY UPDATE。您需要使用 MERGE 语句。
例如,
MERGE INTO dest_table t
USING (SELECT <column_list>
FROM source_table) s
ON (t.col1 = s.col1) -- use required join keys
WHEN MATCHED THEN
UPDATE SET t.<column_list> = s.<column_list>
...
WHEN NOT MATCHED THEN
INSERT( t.<column_list>)
VALUES( s.<column_list>)
阅读文档以获取有关 MERGE. Few examples here 的更多详细信息。
更新 基于编辑问题中 OP 的新查询。
WHEN NOT MATCHED THEN INSERT(REPORT_ID,TITLE,CATEGORY,DISPLAY_ORDER,QUERY,DESCRIPTION,CONTENT_SEQ,DELD,ADMIN_ID) VALUES(27, 'a', 'z', 9, 'q', 'd', 1, 0, 1;
分号前的末尾缺少右大括号。试试这个:
MERGE INTO reports rt
USING (SELECT report_id,
title,
category,
display_order,
query,
description,
content_seq,
deld,
admin_id
FROM reports) rs
ON (rt.report_id = rs.report_id)
WHEN matched THEN
UPDATE SET rt.title = 'a',
rt.category = 'z',
rt.display_order = 9,
rt.query = 'q',
rt.description = 'd',
rt.content_seq = 1,
rt.deld = 0,
rt.admin_id = 1
WHEN NOT matched THEN
INSERT(report_id,
title,
category,
display_order,
query,
description,
content_seq,
deld,
admin_id)
VALUES(27,
'a',
'z',
9,
'q',
'd',
1,
0,
1);