我正在尝试以下方法:
CREATE TYPE T_TEST AS OBJECT (
TEST_ROWID ROWID,
TEST_DATA NUMBER(12)
);
/
但是我收到了一个错误:
ORA-24344: success with compilation error
PLS-00530: Illegal type used for object type attribute: 'ROWID'.
我想存储rowid,因为它们比索引查找更快。
实现上述目标的好方法是什么?转换为VARCHAR2
和从{{1}}转换可能会引入与使用索引一样多的开销吗?
答案 0 :(得分:1)
您的类型定义中至少有两个错误。
不带引号的标识符不能是Oracle SQL保留字。带引号的标识符可以是保留字,但不建议这样做。
注意:保留字ROWID是此规则的例外。你不能 使用大写单词ROWID(引用或不引用)作为列 名称。但是,您可以将大写单词用作带引号的标识符 这不是列名,您可以使用一个或多个单词 任何引用的小写字母(例如,“Rowid”或“rowid”) 标识符,包括列名。
所以你不能使用ROWID作为变量名。
第二个是你不能使用ROWID类型。如果你试试,你会得到PLS-00530
据我所知,CHARTOROWID / ROWIDTOCHAR函数可能有所帮助。