我想寫一個存儲函數返回一個數組rowid
。我做的第一件事是創建TABLE
類型rowid
:寫一個存儲函數返回一個rowid數組
CREATE OR REPLACE TYPE T_ROWID_ARRAY IS TABLE OF ROWID;
但是,顯示以下錯誤消息:
PLS-00531: Unsupported type in a VARRAY or TABLE type: 'ROWID'.
一些google搜索後,它看起來像甲骨文11gR2的不允許創建table
類型的rowid
。
那麼是否有任何解決方法,以便我可以編寫一個存儲的函數來返回多個rowid(s)?
我希望通過寫像下面以簡化我的SQL:
SELECT * FROM TABLE_A WHERE ROWID IN (SELECT COLUMN_VALUE FROM GET_ROW_IDS('A', 'B', 'C'));
ROWID在Oracle中不是有效的數據類型。它是一個僞列,它在數據庫中表示記錄所在磁盤上的物理位置。使用varchar2類型的集合來存儲rowid CREATE OR REPLACE TYPE T_ROWID_ARRAY IS TABLE OF VARCHAR2(100); –
@PrashantMishra:ROWID甚至是一個數據類型,但它不能用於創建表格 – Aleksej
@ Aleksej - 你是對的......我錯過了它。它也是一個數據類型。並且我們可以在表格中列出它: SQL> create table test(t rowid); Table created 0.613秒執行 它只接受rowid: SQL>插入測試值('AAAAB0AABAAAAOhAAA'); 插入1行 在0.578秒內執行 SQL>插入測試值('123'); 插入測試值('123') ORA-01410:無效的ROWID –