sql – Oracle中的匿名TABLE或VARRAY型別
在Oracle中,我有時會建立一些這樣的結構
SELECT * FROM TABLE(STRINGS('a', 'b', 'c')) SELECT * FROM TABLE(NUMBERS(1, 2, 3))
顯然,我可以為上述宣告我自己的型別.我可以在TABLE和VARRAY之間進行選擇.例如:
CREATE TYPE STRINGS AS TABLE OF VARCHAR2(100); CREATE TYPE NUMBERS AS VARRAY(100) OF NUMBER(10);
在這種特殊情況下,另一個解決方案是寫東西
SELECT 'a' FROM DUAL UIO/">NION ALL SELECT 'b' FROM DUAL UNION ALL SELECT 'c' FROM DUAL
但是我可能會有更復雜的例子,我真的需要一個TABLE / VARRAY型別.那麼如果我的SQL在一個未知的系統上執行,我不能建立型別,因為我可能沒有必要的資助?
所以我的問題是:Oracle是否知道任何Oracle例項上可用的“匿名”TABLE / VARRAY型別?類似於Postgres / H2 / HSQLDB的簡單ARRAY型別?
更新:我主要從Java執行這個SQL,如果這是相關的.不需要向我解釋PL / SQL,我只是在尋找匿名SQL陣列型別(即“匿名”獨立儲存型別).如果根本不存在,答案是否定的
提供你不要害怕明確引用SYS模式有幾個.這裡有一些我經常使用(odcivarchar2list不太好,因為它嚼了很多記憶體:對於我喜歡dbms_debug_vc2coll的字串).
SQL> desc sys.odcinumberlist sys.odcinumberlist VARRAY(32767) OF NUMBER SQL> desc sys.odcivarchar2list sys.odcivarchar2list VARRAY(32767) OF VARCHAR2(4000) SQL> desc sys.ODCIDATELIST sys.ODCIDATELIST VARRAY(32767) OF DATE SQL> desc sys.dbms_debug_vc2coll sys.dbms_debug_vc2coll TABLE OF VARCHAR2(1000) SQL>
但是,如果這些不足以滿足您的需求,請執行此查詢以查詢更多內容:
select type_name , owner from all_types where typecode = 'COLLECTION' and owner != user /
當然,這個結果會因資料庫而異.例如,我的資料庫中的很多關係都是由XDB擁有的,並不是每個系統都會安裝它.儘管在早期版本中並不總是記錄這個答案,但是在9iR2(也許是早期版本)之後,我在每個資料庫上都可以看到這個答案的頂部的四個.
“Note that ALL_COLL_TYPES seems to be an even better dictionary viewto find appropriate types”
那是個很好的觀點.我們也可以對COLL_TYPE進行過濾,以便了解VARRAY.該檢視被引入10g,而ALL_TYPES在9i上可用.和大部分的Oracle一樣,版本越晚,它的功能就越多.
http://stackoverflow.com/questions/8785459/anonymous-table-or-varray-type-in-oracle