Oracle-12c
在 Oracle 12c 中,當我只有隻讀權限時,是否有 CREATE TYPE 的替代方法?
我對 Oracle 12c 系統具有隻讀訪問權限,在該系統中,我獲得額外權限或讓 DBA 代表我更改任何內容的可能性為零(例如為我執行 CREATE TYPEs)。
我正在使用 Oracle 12c 功能
WITH FUNCTION myfunc() .. SELECT ..
創建函式作為我的 SQL 查詢的一部分,效果很好。除了,我想做類似的事情,如下所示:通常 在
WITH FUNCTION myfunc(p_numbers t_numbers) .. SELECT ..
哪裡聲明: 我做不到。t_numbers``CREATE TYPE t_numbers AS TABLE OF NUMBER;
CREATE TYPE
有沒有其他方法可以在沒有特權的情況下完成這種“內聯”功能?我希望能夠將任意數量的數字傳遞給內聯函式,如本文所述。
SYS.ODCINUMBERLIST
有一個名為which is a的內置類型VARRAY(32767) of NUMBER
,並且EXECUTE
授予每個人(PUBLIC
)的特權。您最多可以將其用於 32767 個號碼,例如:with function f1 (p_numbers SYS.ODCINUMBERLIST) return number as begin return p_numbers.count; end; select f1(SYS.ODCINUMBERLIST(1,2,3,4,5,6,7)) from dual; / F1(SYS.ODCINUMBERLIST(1,2,3,4,5,6,7)) ------------------------------------- 7
SYS.FI_NUMERICALS
在 19c 中,還有另一種稱為a 的內置類型TABLE of NUMBER
,任何人都可以以類似的方式使用。with function f1 (p_numbers SYS.FI_NUMERICALS) return number as begin return p_numbers.count; end; select f1(SYS.FI_NUMERICALS(1,2,3,4,5,6,7)) from dual; / F1(SYS.FI_NUMERICALS(1,2,3,4,5,6,7)) ------------------------------------ 7
我沒有找到後者的任何文件或參考資料。