zoukankan      html  css  js  c++  java
  • Oracle : ORA 00933: SQL command not properly ended

    ORA-00933: SQL command not properly ended
    

    基于这个报错,网上有很多答案,包括:
    1.在INSERT语句中使用了JOIN或者ORDER BY
    2.在UPDATE语句中使用了JOIN
    3.在DELETE语句中使用了ORDER BY
    4.在SELECT语句中使用了UNIONUNION ALL,并且在非结尾的地方使用了ORDER BY
    5.在SELECT语句表之间忘记了逗号,
    6.在Oracle 8i中使用INNER JOIN或类似的关键词(这些是在Oracle 9i中实现的)
    7.遗漏逗号,遗漏括号,子语句使用错误
    ...
    比较好的博客有How To Resolve ORA-00933 SQL Command Not Properly Ended
    可以说这个问题产生的原因五花八门
    我的问题也很奇怪,我使用Navicat直连数据库,并执行语句进行测试,测试通过

    delete from d1 
    where ID in 
    (select d1.ID 
    from d1 
    join d2 
    on d1.d2ID = d2.ID 
    where d2.xxx = '...');
    

    执行结果

    > Affected rows: 0
    > 时间: 0.013s
    

    但使用Oracle.DataAccess或者Oracle.ManagedDataAccess执行该语句的时候,报错:

    ORA 00933: SQL command not properly ended
    

    这令我百思不得其解,后来通过测试发现:把最后的分号去掉就可以了,即变成:

    delete from d1 
    where ID in 
    (select d1.ID 
    from d1 
    join d2 
    on d1.d2ID = d2.ID 
    where d2.xxx = '...')
    

    这里Mark一下,如果有知道这个问题原因的大神,希望可以科普一下~

    参考资料

    C#连接Oracle数据库的方法

    -----------------------后记------------------------------------------
    我去stackoverflow上面问了一下:简单来说,不需要在最后加分号
    ORA 00933: SQL command not properly ended with C#

  • 相关阅读:
    微信消息类型和事件类型
    lnmp环境搭建脚本
    laravel框架踩过的坑
    vue结构详解
    PHP消息队列实现及应用
    laravel 运行错误
    笔记分享
    cf730e
    cf 730i
    cf 731f
  • 原文地址:https://www.cnblogs.com/Lulus/p/14035023.html
Copyright © 2011-2022 走看看