我想写一个存储函数返回一个数组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 –