【发布时间】:2016-02-10 14:09:33
【问题描述】:
我正在尝试使用插入和更新 sql 语句。
我的表如下:
|c1|c2|c3|c4|c5
|1 2 a b c
|1 3 e f g
c3,c4,c5 可以有不同的值。通过 C1 和 C2 列的组合,该行可以是唯一的。我需要能够检查第一行是否不存在值 c1,c2 然后插入数据。如果 c1,c2 已经具有例如 (1,2) 的值,并且如果返回的数据具有相同的 c1,c2 值,则使用最新值更新 c3,c4,c5。
我尝试使用以下查询
INSERT INTO t1 (c1,c2,c3,c4,c5)
VALUES ('1','2','a','b','c')
ON DUPLICATE KEY
UPDATE c3='e',c4 = 'f',c5='g';
我收到如下 ORA 错误 SQL 命令未正确结束 (ORA-00933)
sagi 回复后更新
合并到表 1 t USING(select '000004' as SENDER,'Receiver' as RECEIVER ,'1030' as IDENTIFIER,'2016' as CREATIONDATEANDTIME,'2' as ACKCODE,'Test' as ACKDESCRIPTION from table1 ) 开(t.SENDER = s.SENDER 和 t.IDENTIFIER = s.IDENTIFIER) 匹配时更新设置 t.CREATIONDATEANDTIME = '1213',t.RECEIVER = 'hello' 如果不匹配则插入 (t.SENDER,t.RECEIVER,t.IDENTIFIER,t.CREATIONDATEANDTIME,t.ACKCODE,t.ACKDESCRIPTION) 值(s.SENDER,s.RECEIVER,s.IDENTIFIER,s.CREATIONDATEANDTIME,s.ACKCODE,s.ACKDESCRIPTION)
查询的输出:
场景一:当没有符合条件的数据时(t.SENDER = s.SENDER and t.IDENTIFIER = s.IDENTIFIER),报错如下
ORA-30926: 无法在源表中获得稳定的行集。
原因:由于大型 dml 活动或非确定性活动 where 子句,无法获得一组稳定的行。
行动:删除任何非确定性 where 子句并重新发出 dml
场景2:当有符合条件的数据时(t.SENDER = s.SENDER and t.IDENTIFIER = s.IDENTIFIER)然后在表格中,我可以看到5个新条目。
你能帮忙吗?
【问题讨论】:
-
看起来像 Oracle 错误消息而不是 mysql?!
-
oracle可能拥有mysql,但这并不意味着oracle RDBMS会突然开始支持mysql-specific sql extensions...
-
这被标记为 Mysql 但你有一个 Oracle 错误。您实际使用的是什么数据库?
-
抱歉...我正在使用 ORACLE...:(
-
也许您需要使用
MERGE语句而不是重复键。