如何在Oracle10g中获取行对象标识符?

7kqas0il  于 2023-05-16  发布在  Oracle
关注(0)|答案(2)|浏览(119)

我是使用Oracle 10g快速版的ORDBMS的新手,我必须获取对象表中每一行的对象标识符。我使用下面的例子。

CREATE TYPE person AS OBJECT(
name VARCHAR2(20)
);

CREATE TABLE person_table OF person;
INSERT INTO person_table VALUES ( person('Test') );

已成功创建类型person和表person_table。行被插入,我可以使用

SELECT * from person_table;

但是执行

SELECT REF(p) FROM person_table p;

给出以下错误:
ORA-00932: inconsistent datatypes: expected NUMBER got REF SYS.PERSON
如何获取表中每一行的对象标识符?任何帮助将不胜感激。

14ifxucb

14ifxucb1#

我看到错误是指SYS.PERSON。是否以SYS用户的身份创建对象和表?如果是这样,请尝试将其创建为“普通”用户,而不是SYS用户。

3zwtqj6y

3zwtqj6y2#

你可以简单地得到 OBJECT_ID 伪列,像这样把每个对象属性作为单独的列:

SELECT OBJECT_ID, p.* FROM person_table p;

或者使用 VALUE() 函数将整行视为对象:

SELECT OBJECT_ID, VALUE(p) FROM person_table p;
  • ROWID* 是分配给数据库表中每一行的不同值,而不仅仅是对象表。您的问题是关于OBJECT_ID的,但您也可以显示它:
SELECT OBJECT_ID, ROWID, p.* FROM person_table p;
SELECT OBJECT_ID, ROWID, VALUE(p) FROM person_table p;

参见:https://docs.oracle.com/cd/B14117_01/server.101/b10759/pseudocolumns004.htm

相关问题