【问题标题】:Oracle Exception: SQL command not properly endedOracle 异常:SQL 命令未正确结束
【发布时间】:2012-12-16 19:00:56
【问题描述】:

我正在使用 JSP 和 Servlet 开发 Web 应用程序(IDE:Eclipse,容器:Tomcat7.0,DB:Oracle 10)

我想在一个查询中从两个表中获取数据

查询:

query = "select * from PROTOCOL as a, ACTIONS as b where a.PROTOCOL_ID = b.PROTOCOL_ID";

但在运行应用程序后,我得到以下异常:

java.sql.SQLException: ORA-00933: SQL command not properly ended

查询有什么问题吗?

【问题讨论】:

    标签: java sql oracle


    【解决方案1】:

    这里任何人都可能需要的评论.. PostgreSQL 似乎接受 FROM/JOIN 旁边的 AS

    【讨论】:

      【解决方案2】:

      您遇到的问题是关键字AS。这用于SELECT 部分中的列。它对您指定表的FROM 无效。

      你有

      select * from PROTOCOL as a, ACTIONS as b

      应该是

      select * from PROTOCOL a, ACTIONS b...

      来自Oracle Docs

      t_alias

      指定一个相关名称,它是表、视图的别名, 物化视图或用于评估查询的子查询。这个别名是 如果选择列表引用任何对象类型属性或 对象类型方法。相关名称最常用于 相关查询。对表、视图或物化的其他引用 整个查询中的视图必须引用此别名。

      示例:

      SELECT select_list 
          FROM table1 t_alias1 
          WHERE expr operator 
              (SELECT column_list 
                  FROM table2 t_alias2 
                  WHERE t_alias1.column 
                     operator t_alias2.column); 
      

      【讨论】:

      • @gdoron,是的。这很常见。但是在 Oracle docs 中使用 as 是不允许的。
      • @Bhushan PROTOCOL 和 ACTIONS 也存在,并且它们对查询它们的用户可见(此外,如果您没有以表所有者身份登录,请确保存在同义词,否则您将必须以所有者名称作为前缀)?
      • @Vash,不确定你在哪里看到过关于别名或as grammer 的任何信息。
      • @gdoron,我已经添加了文档来回答。你不会在那里找到任何关于 As 的信息,因为它是不允许的。
      • @Vash,那么您添加的文档到底添加了什么(?!)无论如何,我看到明天上班我会检查AS,我承认我从未使用过它......
      【解决方案3】:

      别名语法错误。尝试以下方法:

      query = "select * from PROTOCOL a,ACTIONS b where a.PROTOCOL_ID = b.PROTOCOL_ID";
      

      【讨论】:

      • 这是因为 PROTOCOL 或 ACTIONS 表不存在,或者在您没有任何授权的不同模式中。首先检查表名是否正确,如果是,请从 all_objects/dba_objects 视图中查找详细信息。检查对象名称、对象类型和所有者。如果所有者说应用程序使用 APPS.PROTOCOL & APPS.ACTIONS 更改查询
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-01-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-04-15
      • 2022-01-18
      • 1970-01-01
      相关资源
      最近更新 更多