Oracle 使用rowid属性创建对象类型

Oracle 使用rowid属性创建对象类型,oracle,object,oracle11g,ddl,rowid,Oracle,Object,Oracle11g,Ddl,Rowid,我正在尝试使用rowid数据类型创建一个类型,但由于我正在尝试使用的类型,我遇到了此错误: SQL> CREATE TYPE join_t IS OBJECT (inn rowid, out rowid ); / Warning: Type created with compilation errors. 即使我可以创建具有rowid数据类型的表: SQL> create table test_rowid (inn rowid,out rowid); Table cr

我正在尝试使用
rowid
数据类型创建一个类型,但由于我正在尝试使用的类型,我遇到了此错误:

SQL> CREATE TYPE join_t IS OBJECT (inn  rowid,    out rowid ); 
/

Warning: Type created with compilation errors.
即使我可以创建具有rowid数据类型的表:

SQL> create table test_rowid (inn rowid,out rowid);

Table created.

是否可以使用rowid类型属性创建上述类型的连接?

否,不能使用
rowid
字段创建对象类型。如果通过
用户错误
视图或使用SQL*Plus命令
显示错误
查看引发的实际错误,您将看到:

LINE/COL ERROR
-------- ------------------------------------------------------------------------------
1/28     PLS-00530: Illegal type used for object type attribute: 'ROWID'.
1/39     PLS-00530: Illegal type used for object type attribute: 'ROWID'.
:

数据类型限制

  • 不能对属性施加NOTNULL约束
  • 不能指定ROWID、LONG或LONG RAW类型的属性
  • 不能为ADT指定UROWID的数据类型。
作为一种解决方法,您可以在对象中使用字符串类型,并在设置为获取字段值时通过和函数转换值:

CREATE TYPE join_t IS OBJECT (inn varchar2(18), out varchar2(18) );
/

Type JOIN_T compiled

SELECT join_t(rowidtochar(rowid), rowidtochar(rowid)) FROM DUAL;

JOIN_T(ROWIDTOCHAR(ROWID),ROWIDTOCHAR(ROWID))(INN, OUT)
-------------------------------------------------------
JOIN_T('AAAAB0AABAAAAOhAAA', 'AAAAB0AABAAAAOhAAA')

不过,在对象中存储rowid似乎不是特别有用,因为它们可能会更改。

“可能吗?”。不,不是。我正在这样做。。。在函数ROWIDTOCHAR中使用char类型。想知道我是不是真的做不到it@Siqueira-你的问题没有提到这一点。不,您确实不能将
rowid
用作对象属性数据类型,抱歉。