【问题标题】:REF() function returns "SQL command not properly ended"REF() 函数返回“SQL 命令未正确结束”
【发布时间】:2019-08-31 00:20:06
【问题描述】:

我正在尝试熟悉 O/R 数据库,这导致我尝试获取对象引用。

首先列出特定用户的 all_objects,然后选择一个类型为 TABLE 的对象 (CF02),即 OBJECT_TYPE = 'TABLE'

然后我打开表格,只选择第一个字段 (OBJECT_ID) 为 9142055040413031761 的行。

然后我尝试在该行获取ref()

  SELECT ref(cf) FROM rdbmgr.CF02 as cf
  WHERE OBJECT_ID = 9142055040413031761

希望能得到与Oracle书籍中类似的结果,这是对象位置的内部编号...

【问题讨论】:

  • 与 ref 无关 - 从 as cf 中删除 asYou can't use as for table aliases in Oracle.
  • 我试过了,然后它给了我错误 "CF":invalid identifier
  • CF02是对象类型的表,还是带有对象列的普通表?请在您的问题中包含相关的 DDL。
  • 在 ALL_OBJECTS 表中,在 OBJECT_TYPE 列下,它出现为 'TABLE'
  • 我也不确定如何获得 DDL - 我没有制作这个数据库。 - 但我会假设 SELECT * ALL_OBJECTS WHERE OBJECT_TYPE = 'TABLE' 只会列出对象类型的表...

标签: sql oracle ref


【解决方案1】:

如果您的表是从对象类型创建的,您可以使用ref() 函数。

REF 将与对象表对象视图的行关联的相关变量(表别名)作为其参数。

例如你有一个对象类型:

create or replace TYPE t_pos AS OBJECT 
( 
  x number,
  y number
)
/

你可以创建一个表

 CREATE TABLE position OF t_pos ;

-- insert some data for test
insert into position values (1,2);

所以你有一张桌子position 现在您可以使用ref 函数进行选择

select ref(t) from  position  t;

结果

REF(E)
--------------------------------------------------------------------------------
0000280209587CADBD96F74009BBF01C1596D74E72E7986EC7F3AF40B4A264DA1BE6FE27D30040B2
790000

如果您的表创建为create table position(x number, y number) 您不能在 select 中使用 ref 函数

查看文档here

【讨论】:

  • 谢谢!因此,必须使用对象类型创建对象表,以便 oracle 为表中的对象提供任何类型的引用......我猜是因为即使它们是相似的对象,它们在技术上并不是相同的对象类型?
猜你喜欢
  • 1970-01-01
  • 2016-09-21
  • 2019-10-11
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多