我有以下查询工作:
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:无效标识符”
醇>
答案 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);