PIPELINED(關鍵字)表明這是一個管道函數,管道函數的返回值類型必須為集合,在函數中,PIPE ROW語句被用來返回該集合的單個元素,函數則以一個空的RETURN語句結束,以表明它已經完成。
|
在sql*plus中執行該函數,大家需要首先設置arraysize為1,否則服務器會按照默認的15來向客戶端返回信息,這會影響我們的測試效果。
|
11 rows selected.
如果要在pipeline中執行DML操作,則必須使用自治事務,否則會報ORA-14551錯誤
|
在Oracle 9205及其之后的版本中,在pipeline function中使用自治事務,則必須在pipe row之前提交或者回滾事務,否則會報ORA-06519錯誤。
|
此處是由于在9205中修復Bug 2711518導致了自治事務的行為有所改變。如果系統從9205之前的版本升級到之后的版本,需要保證pipeline function的行為和以前版本一致,Oracle提供了一個10946事件來設置和以前版本的兼容性,如果在管道函數中使用了select for update的cursor,則必須設置event回歸以前的特性,否則即使在pipe row之前commit也會導致出現ORA-1002錯誤。
|
新聞熱點
疑難解答