将ROWID存储在Oracle OBJECT类型中

时间:2014-11-03 14:06:36

标签: sql oracle oracle11g

我正在尝试以下方法:

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}}转换可能会引入与使用索引一样多的开销吗?

1 个答案:

答案 0 :(得分:1)

您的类型定义中至少有两个错误。

  

不带引号的标识符不能是Oracle SQL保留字。带引号的标识符可以是保留字,但不建议这样做。

     

注意:保留字ROWID是此规则的例外。你不能   使用大写单词ROWID(引用或不引用)作为列   名称。但是,您可以将大写单词用作带引号的标识符   这不是列名,您可以使用一个或多个单词   任何引用的小写字母(例如,“Rowid”或“rowid”)   标识符,包括列名。

所以你不能使用ROWID作为变量名。

第二个是你不能使用ROWID类型。如果你试试,你会得到PLS-00530

据我所知,CHARTOROWID / ROWIDTOCHAR函数可能有所帮助。