博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
merge into报错ORA-00926、ORA-38014
阅读量:5156 次
发布时间:2019-06-13

本文共 857 字,大约阅读时间需要 2 分钟。

  今天用ibatis写个插入操作,为了兼容修改想使用 merge into语句,以便重复插入时直接 update,具体语句如下:

MERGE INTO t_wlf_info t USING dual ON(t. id=#id# and t.channel=#channel#)WHEN MATCHED THEN UPDATE SET t.id=#id#,t.channel=#channel#,t.url=#url#WHEN NOT MATCHED THEN INSERT t_wlf_info(id,channel, url) VALUES(#id#,#channel#,#url#)

  结果遇到了两个问题:

1、java.sql.BatchUpdateException:ORA-00926: missing VALUES keyword

...

2、java. sql.BatchUpdateException: ORA-38104: Columns referenced in the ON Clause cannot be updated: "T"."ID"

...

  第一个问题是在插入时多加了表明,在INSERT后面把表名去掉就好,另外提一点,update和insert后面都不需要加表明的,另外insert后面也不用加INTO,merge into的语法就是这样的。第二个问题是不能把ON后面的条件字段放到update里,它认为你拿id和channel做条件来判断是插入还是修改,如果匹配那么id和channel已经是相应的值了,就没去修改了,举例id=3 and channel=12345678时我去update,否则insert,那么匹配update时被修改的数据已经是id为3、channel为12345678了,这两个字段就不用update了。

转载于:https://www.cnblogs.com/wuxun1997/p/6602202.html

你可能感兴趣的文章
搭建Docker环境---Docker概述
查看>>
UVa 11383 少林决胜(二分图最佳完美匹配)
查看>>
ISP DSP的不同
查看>>
深入Linux grep指令的详解(实用型)
查看>>
嵌入式根文件系统的移植和制作详解
查看>>
javascript Uncaught ReferenceError: 方法名 is not defined
查看>>
Android 学习心得(2)——Android内置数据库SQLite
查看>>
走进AngularJs(二) ng模板中常用指令的使用方式
查看>>
6-sift特征匹配
查看>>
网页编程技术三(H5中表格的用法)
查看>>
UITextView自定义placeholder功能:用一个label写了文字,然后当检测到长度不为0的时候就把label隐藏...
查看>>
MongoDB 插入、更新、删除
查看>>
arc()
查看>>
【leetcode】Majority Element
查看>>
数组的方法之(Array.prototype.reduce() 方法)
查看>>
itchat库微信自动回复祝福语
查看>>
移动端浏览器touch事件的研究总结
查看>>
pandas—总结(2) 数据读写 (更新中)
查看>>
POJ 2096 Collecting Bugs:期望dp
查看>>
绩效成绩
查看>>