2014-09-19 13 views
0

是否有任何方式從表(和XMLSequence(提取物(的XMLType(XML),xpath的)))結果傳遞給函數作爲參數?傳遞表(xmlsequence()運算)的結果,以一個函數作爲參數

我有一個查詢:

select 
    extractvalue(value(data), '/path/to/element') 
from 
    table(xmlsequence(extract(xmltype(in_xml), in_path))) data; 

我想什麼做的是所有的XML操作隔離到一對夫婦的功能,有這樣的事情:

select 
    get_value(data, '/path/to/element') 
from 
    get_table(in_xml, in_path) data; 

或至少:

select 
    get_value(data, '/path/to/element') 
from 
    table(xmlsequence(get_table(in_xml, in_path)) data; 

移動沒有問題提取(xmltype(in_xml), in_path)納入get_table函數,但我將結果傳遞給get_value有問題。

有什麼想法?

回答

1

table()是一個表集合表達式,傳遞一個表達式(或者一個表)作爲參數並沒有意義。

我能想到的最接近的是直接傳遞從xmlsequence()中間結果,如果你想從一個函數獲得,到get_value()

create or replace function get_xmlseq(in_xml varchar2, in_path varchar2) 
return xmlsequencetype 
as 
    l_xmlseq xmlsequencetype; 
begin 
    select xmlsequence(extract(xmltype(in_xml), in_path)) 
    into l_xmlseq 
    from dual; 

    return l_xmlseq; 
end get_xmlseq; 
/

create or replace function get_value (in_xmlseq xmlsequencetype, in_path varchar2) 
return varchar2 
as 
    l_value varchar2(32767); 
begin 
    select extractvalue(value(data), in_path) 
    into l_value 
    from table(in_xmlseq) data; 

    return l_value; 
end get_value; 
/

然後調用它爲:

select get_value(get_xmlseq(:in_xml, :in_path), '/path/to/element') from dual; 

其中gives the same result as your original query,至少是一個非常簡單的例子。

但是,如果你這樣做,那麼你可能會有一個函數,它需要(in_xml, in_path, '/path/to/element')以及xmlsequence調用。或者因爲這已被棄用,使用xmltable和/或xquery

相關問題