我正在尝试使用 $ ./simple_exec
0
1
2
3
5
5
6
6
9
91
233
353
557
723
3553
4576
数据类型创建一个类型,但由于我尝试使用的类型,我收到此错误:
rowid
即使我可以创建一个包含rowid数据类型的表:
SQL> CREATE TYPE join_t IS OBJECT (inn rowid, out rowid );
/
Warning: Type created with compilation errors.
是否可以使用rowid-type属性创建上面的SQL> create table test_rowid (inn rowid,out rowid);
Table created.
类型?
答案 0 :(得分:3)
不,您无法创建包含rowid
字段的对象类型。如果您通过user_errors
视图或SQL * Plus命令show errors
查看引发的实际错误,您将看到:
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'.
数据类型的限制
- 您不能对属性强加NOT NULL约束。
- 您无法指定ROWID,LONG或LONG RAW类型的属性。
- 您无法为ADT指定UROWID的数据类型 ...
作为一种变通方法,您可以在对象中使用字符串类型,并在设置时通过rowidtochar
和chartorowid
函数将值转换为获取字段值:
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存储在对象中似乎并不特别有用,因为它们可以更改。