gpt4 book ai didi

oracle - 创建具有 rowid 属性的对象类型

转载 作者:行者123 更新时间:2023-12-02 00:59:01 32 4
gpt4 key购买 nike

我正在尝试使用 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 类型属性创建上面的这种类型 join_t

最佳答案

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

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'.

The documenation says :

Restrictions on datatype

  • You cannot impose the NOT NULL constraint on an attribute.
  • You cannot specify attributes of type ROWID, LONG, or LONG RAW.
  • You cannot specify a data type of UROWID for an ADT.
    ...

作为解决方法,您可以在对象中使用字符串类型,并在设置时通过 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 存储在对象中似乎并不是特别有用,因为它们可以更改。

关于oracle - 创建具有 rowid 属性的对象类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42907736/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com