2 个答案:

答案 0 :(得分:0)

Oracle不允许您加入更新声明。您需要使用相关子查询,例如:

UPDATE TABLE1 TOP_A

SET EARLIEST_STARTDATE = (

SELECT CASE WHEN DATE_SUBMITTED <

TO_DATE('01/04/' || EXTRACT(YEAR FROM ADD_MONTHS(DOB, 24)), 'DD/MM/YYYY')

THEN TO_DATE('01/04/' || EXTRACT(YEAR FROM ADD_MONTHS(DOB, 24)),'DD/MM/YYYY')

ELSE TO_DATE(DATE_SUBMITTED,'DD/MM/YY') END

FROM TABLE1 SUB_A

INNER JOIN TABLE2 SUB_C on SUB_A.ID = SUB_C.ID

WHERE SUB_A.ID = TOP_A.ID

AND ADD_MONTHS(SUB_C.DOB, 24) BETWEEN

TO_DATE('01/01/' || EXTRACT(YEAR FROM ADD_MONTHS(SUB_C.DOB, 24)),'DD/MM/YYYY')

AND TO_DATE('31/03/' || EXTRACT(YEAR FROM ADD_MONTHS(SUB_C.DOB, 24)),'DD/MM/YYYY')

)

WHERE EARLIEST_STARTDATE IS NULL

AND WS_ELIGIBILITY_STATUS = 1

AND (CLAIM_ADD_CRITERIA_FLAG = 'N' OR CAF = 'Y' OR (CCA_CODE = 'SC' AND CLAIM_ADD_CRITERIA_FLAG = 'Y'))

/

这假定TABLE_1.ID是唯一的。子查询执行两个表之间的连接,并且它与子查询中的WHERE SUB_A.ID = TOP_A.ID子句正在更新的行相关联。

您的AND / OR部分有点不清楚,因此您可能需要重新考虑这些子句的括号,以获得满足您业务需求的正确布尔结果。

其他情况下的TO_DATE(DATE_SUBMITTED,'DD/MM/YY')看起来也很可疑;如果DATE_SUBMITTED已经是日期,那么只需直接参考,不要为此致to_date()。在转换之前,您正在进行隐式转换为字符串;而且由于YY模型,你可能会在这个过程中失去这个世纪。

其他日期处理也可以简化。

答案 1 :(得分:0)

UPDATE A

SET EARLIEST_STARTDATE =

(SELECT

CASE WHEN (DATE_SUBMITTED < TO_DATE('01/04/' || EXTRACT(YEAR FROM ADD_MONTHS(DOB, 24)),'DD/MM/YYYY'))

THEN TO_DATE('01/04/' || EXTRACT(YEAR FROM ADD_MONTHS(DOB, 24)),'DD/MM/YYYY')

ELSE TO_DATE(DATE_SUBMITTED,'DD/MM/YY') END

FROM TABLE1 A

INNER JOIN TABLE2 C on A.ID = C.ID

WHERE (EARLIEST_STARTDATE IS NULL) AND

(A.WS_ELIGIBILITY_STATUS = 1) AND

(A.CLAIM_ADD_CRITERIA_FLAG = 'N' OR A.CAF = 'Y' or A.CCA_CODE = 'SC' AND A.CLAIM_ADD_CRITERIA_FLAG = 'Y') AND

(ADD_MONTHS(C.DOB, 24) BETWEEN TO_DATE('01/01/' || EXTRACT(YEAR FROM ADD_MONTHS(C.DOB, 24)),'DD/MM/YYYY') AND TO_DATE('31/03/' || EXTRACT(YEAR FROM ADD_MONTHS(C.DOB, 24)),'DD/MM/YYYY')))

Oracle命令结束,更新语句oracle - ORA-00933:SQL命令未正确结束相关推荐

  1. 解决Oracle+Mybatis批量插入报错:SQL 命令未正确结束

    Mybatis批量插入需要foreach元素.foreach元素有以下主要属性: (1)item:集合中每一个元素进行迭代时的别名. (2)index:指定一个名字,用于表示在迭代过程中,每次迭代到的 ...

  2. oracle联表更新语句

    oracle联表更新语句,此处为什么要写下来呢,因为信誓旦旦地用sql中的语句去更新oracle,发现不通用,但是查询可以.所以特意写下来,以免忘记或提醒需要的你们~~ 第一种: update lqp ...

  3. Mybatis使用foreach批量插入Oracle提示命令未正确结束

    错误代码 <insert id="multiInsertTest" parameterType="java.util.List">INSERT IN ...

  4. mysql中00933错误_java.sql.SQLException: ORA-00933: SQL 命令未正确结束错误解决

    在程序运行时,程序报sql错误"nested exception is java.sql.SQLException: ORA-00933: SQL 命令未正确结束",具体错误如下所 ...

  5. mybatis+oracle批量插入报不符合协议和sql未正确结束

    在Java中循环save,需要加useGeneratedKeys="false",否则报错不符合协议 mybatis批量插入,也需要在insert里加入 useGeneratedK ...

  6. SSM:Cause: java.sql.SQLSyntaxErrorException: ORA-00933: SQL 命令未正确结束的解决

    QUESTION:SSM:Cause: java.sql.SQLSyntaxErrorException: ORA-00933: SQL 命令未正确结束的解决? ANWSER: 一:问题提出: 使用S ...

  7. Mybatis 批量插入报ORA-00933: SQL 命令未正确结束

    Mybatis 批量插入报ORA-00933: SQL 命令未正确结束 错误出现的场景是这样的,将多个月份的1000条数据分别插入到各月份表中. MySQL中,批量插入数据到表,会在一定程度提高效率. ...

  8. ORA-00933:SQL 命令未正确结束(1)

    项目中mysql数据库换oracle数据库中报ORA-00933:SQL 命令未正确结束 问题 1.报错:ORA-00933:SQL 命令未正确结束 2.解决方法:将图1中的limit分页改成图2中的 ...

  9. ORA-00933: SQL 命令未正确结束处理办法

    问题现象:删除数据库表,oracle中出现bin$XXXXXXXXXX==$0表 ,在对其    (bin$XXXXXXXXXX==$0)删除时,报 ORA-00933: SQL 命令未正确结束 出现 ...

最新文章

  1. iOS9网络适配 info.plist配置
  2. 文件上传检测的基本思路
  3. 全志 移除屏幕超时选项 Patch
  4. hdu 2602 Bone Collector(01背包)模板
  5. 机器学习:利用核函数进行非线性分类
  6. RocketMQ在Windows环境下部署(亲测有效)
  7. 这两个小技巧,让SQL语句不仅躲了坑,还提升了1000倍
  8. Uber无人车安全员之困:这是一份机械、枯燥、影响心理的工作
  9. 不再支持Postman集合v1格式,无法直接导入
  10. 在线播放,将文件转成流媒体
  11. 碎片时间”绑架了多少焦虑的现代人?
  12. 禅与摩托车维修艺术(4)
  13. 确定有限自动机(DFA)和不确定有限自动机(NFA)的主要区别
  14. Java数据结构:图
  15. 通过修改注册表激活 Windows 操作系统
  16. 110.JAVA入门__this内存原理
  17. 微软之行总结(删节稿)
  18. Houdini 铁链结算制作
  19. 计算机毕业设计基于Android企业办公oa 员工考勤请假工资系统
  20. C语言:输入1到5的阶乘

热门文章

  1. 关于Linux的介绍与安装
  2. nginx02-RTFM
  3. Python图像识别-Opencv05 色彩
  4. 【重载和重写的区别】
  5. 搭建网站,需要几种服务器?
  6. ant的下载与安装(一)
  7. vue3视频播放插件vue3-video-play的具体使用方法
  8. 【PM】软件项目管理流程和方法
  9. 数学建模(1)-matlab之fprintf函数用法
  10. 中国剩余定理及其代码实现