2012-06-13 22 views
1

我的代碼中有用戶定義的類型,phrase_context_typ。我打電話給function,phrase_context,它返回phrase_context_typ的一個實例。從Oracle SQL中的用戶定義類型中選擇所有值

用戶定義的類型定義如下:

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

我有一個VIEW含有CONTEXTPARENT_ID列。我想根據phrase_context_typ實例中的值選擇此VIEW

我能做到這一點通過以下方式:

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

這工作,但是否有可能做只有一個呼叫phrase_contextfunction等價?我只想調用function一次不僅是爲了優雅,而且還因爲在function中有更多的select語句,因此通過調用n次來降低效率。

我想我要問的是,如果像下面這樣可以用Oracle SQL實現,即有效地扁平化用戶定義類型實例到行:

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

你的幫助非常感謝。

回答

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 
+0

感謝託尼,大加讚賞。 – jabclab

相關問題