使用子查询时“SQL 命令未正确结束”

Posted

技术标签:

【中文标题】使用子查询时“SQL 命令未正确结束”【英文标题】:"SQL command not properly ended" when using subquery 【发布时间】:2015-04-25 14:22:11 【问题描述】:

我有以下查询工作:

select 
    a.column_value as artigo 
from 
    encomenda e, table(e.artigos) a 
where 
    e.id = 2;

此查询返回以下输出(一行menu_t 类型和另一行bebida_menu_t 类型)。请注意,这不是简单的文本,而是我自己定义的类型的对象,因为这是一个对象关系数据库。

从该结果中,我只想提取 menu_t 行。所以,我尝试了以下查询:

select * 
from (select 
          a.column_value as artigo 
      from 
          encomenda e, table(e.artigos) a 
      where e.id = 2) as subquery 
where 
    subquery.artigo is of (menu_t); 

这给了我错误

    00000 - “SQL 命令未正确结束”

我不明白为什么。

更新:

似乎问题出在as 关键字上。所以,应该是:

select * 
from (select 
          a.column_value as artigo 
      from 
          encomenda e, table(e.artigos) a 
      where e.id = 2) subquery --removed the 'as' here
where 
    value(subquery.artigo) is of (menu_t); --added value() because they were inconsistent types

但是,现在我收到错误消息,指出 subquery.artigo 是无效标识符。

    00000 - “%s:无效标识符”

【问题讨论】:

事实上ASmysql中使用但在ORACLE中没有;为列名artigo 也删除它 【参考方案1】:

你需要改变:

where subquery.artigo is of (menu_t);

where subquery.artigo LIKE '%MENU_T';

【讨论】:

我仍然遇到同样的错误。为什么is of 无论如何都不应该是有效的? 你认为is of 做了什么,你知道什么? 这是一个对象关系型数据库,menu_tbebida_menu_t 是我自己定义的类型。我猜is of 会检查它们是否属于那种类型,例如类似于 Java 的instanceof 问题是子查询别名上的 as 关键字。但我仍然有一个错误。请检查我的原始帖子。【参考方案2】:

所以,要解决第一个问题,正如我在更新中所说,在 Oracle 中,我们不应该在别名上使用 as 关键字。因此,查询变为:

select * 
from (select 
          a.column_value artigo 
      from 
          encomenda e, table(e.artigos) a 
      where e.id = 2) subquery 
where 
    subquery.artigo is of (menu_t); 

但在此之后,我又遇到了另一个错误,如更新中所述。发生的事情是我尝试在REF 中使用is of,它警告我这是一个无效的标识符,但我花了一些时间和许多尝试来实现正确的查询。所以,我需要在art.column_value 列上使用deref()

毕竟,我什至不需要嵌套子查询。最后的查询是:

select value(e).id id, art.column_value artigo 
from encomenda e, table(e.artigos) art 
where e.id = 2 and 
deref(art.column_value) is of (menu_t);

【讨论】:

以上是关于使用子查询时“SQL 命令未正确结束”的主要内容,如果未能解决你的问题,请参考以下文章

SQL 命令未正确结束尝试使用查询连接 3 个表

使用 LIMIT 时 SQL 命令未正确结束

来自 UPDATE 查询的“SQL 命令未正确结束”错误 [重复]

ORA-00933: 使用 CROSS APPLY 时 SQL 命令未正确结束

ORA-00933: SQL 命令未正确结束异常

SQL 中的 PIVOT 给出错误 - ORA-00933: SQL 命令未正确结束