1

我的代码中有一个用户定义的类型,phrase_context_typ. 我调用一个function, phrase_context,它返回一个phrase_context_typ.

用户定义类型定义如下:

CREATE OR REPLACE type phrase_context_typ AS OBJECT (
    context   VARCHAR2(13),
    parent_id NUMBER(10) 
)

我有一个VIEW包含CONTEXTPARENT_ID列。我想根据实例VIEW中存在的值从中进行选择。phrase_context_typ

我可以通过以下方式做到这一点:

select distinct(col)
    from my_view v
    where v.parent_id = PHRASE_CONTEXT(?, ?, ?, ?, ?).parent_id 
          and
          v.context = PHRASE_CONTEXT(?, ?, ?, ?, ?).context  

这可行,但是否可以只调用一次phrase_context function? 我只想调用function一次,不仅是为了优雅,还因为在select调用nfunction时会影响效率。

我想我要问的是,如果可以在 Oracle SQL 中实现以下功能,即有效地将用户定义的类型实例扁平化为一行:

select PHRASE_CONTEXT(?, ?, ?, ?, ?).* from dual; 

非常感谢您的帮助。

4

1 回答 1

1

这个子查询分解将做到这一点:

with data as (select phrase_context (?, ?, ?, ?, ?) obj from dual)
select distinct(col)
    from my_view v, data d
    where v.parent_id = d.obj.parent_id
          and 
          v.context = d.obj.context 
于 2012-06-13T16:06:00.130 回答