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

时间:2015-04-25 14:22:12

标签: sql oracle oracle11g subquery

我有以下查询工作:

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

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

Output of working query

从该结果来看,我只想提取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); 

这给了我错误

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

我无法理解为什么。

更新

似乎问题是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是无效的标识符。

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

2 个答案:

答案 0 :(得分:0)

您需要更改:

where subquery.artigo is of (menu_t);

where subquery.artigo LIKE '%MENU_T';

答案 1 :(得分:0)

所以,为了解决第一个问题,正如我在更新中所说,在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); 

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

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

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);