“从relational(owner.table)中选择*”是什么意思?


8

我们最近在表单的警报日志中出现了一些错误

301598: Tue Jul 16 03:58:29 2013
301599: ORA-01555 caused by SQL statement below 
301600: SELECT * FROM RELATIONAL(<owner>.<table>)

我知道如何处理ORA-01555错误,但是我从未遇到过类似的东西SELECT * FROM RELATIONAL。我查看了DBA_OBJECTS,但没有这样的功能/运算符/任何东西。

谷歌搜索“ SELECT * FROM RELATIONAL”仅返回与ORA-01555有关的问题。

所以,我的问题是:RELATIONAL关键字的含义是什么?


2
看来这是内部深处的东西。因为support.oracle.com也仅显示与您已经搜索过的信息相同的信息。
Mindaugas Riauba

2
我99%的肯定这是用于查询XMLTYPE数据类型的,但是我找不到该引用,因为显然relational很难在数据库文档中进行搜索。
Gaius

1
@Gaius我不认为它与XMLTYPE相关(表不包含XMLTYPE列)。
Frank Schmitt

1
发现这一点可能会有所帮助:forums.oracle.com/thread/1042943?start=0&tstart=0
2013年

更改您的undo_retention参数
2014年

Answers:


1

它似乎是惰性的。我在XE 11上对此进行了测试,发现它什么也没做。

CREATE TABLE dbausers AS SELECT * FROM dba_users;

-- Function doesn't affect result set.
SELECT * FROM dbausers
MINUS
SELECT * FROM RELATIONAL(dbausers);

SELECT * FROM RELATIONAL(dbausers)
MINUS
SELECT * FROM dbausers;

0

我相信这是今天的TABLE函数(不支持管道函数)的别名,但是现在找不到这样的引用。


0

根据此博客文章,特定提示RELATIONAL指示Query Optimizer进行以下操作:

...将对象转换为关系表,类似于RELATIONAL函数...

一个在Oracle社区第二条规定,

RELATIONAL提示使Oracle取消嵌套对象数据并插入属性数据本身而不是对象。所使用的提示只能由Oracle使用-这就是为什么它们没有记录的原因...

我认为这只是一个长期运行的查询的问题,而在内部使用查询提示(未记录)时,ORA-01555错误暴露了该问题。


查询提示嵌套在/ *注释块* /中。这似乎是另外一回事。
durette

0

正如durette所展示的,这是无用的演员。大多数表都是RELATIONAL,这是默认表。但是,Oracle还支持OBJECT表(请参见Oracle的CREATE TABLE docs中的语法),它解释了内部语法的原因。没有任何理由在查询中使用RELATIONAL,但也没有理由使其失败。您应该关注ORA-01555的常规修补程序。ORA-01555通常意味着您的UNDO段不足以处理数据库中的更改率。

您是否能够按需重现此错误?有问题的查询在失败之前如何运行日志?还是您真正的问题:“如何跟踪导致此错误的SQL?”

另外,您没有指定Oracle版本和补丁程序级别。


2
您当然意识到这个问题已经存在了将近六年。
mustaccio

我对修复ORA-01555并没有兴趣(正如我在问题中提到的那样,我知道该怎么做)。我只是对奇怪的RELATIONAL函数调用/语法感兴趣,但多年来我的好奇心已减弱:-)
Frank Schmitt

1
如果您不再需要此问题的反馈,则可以将其删除或接受答案。只要堆栈交换认为该问题没有得到解答,它将继续提示人们提供帮助。
Gordon Hopper

-3

“由下面的SQL语句引起的ORA-01555”下面的行是引起UNDO交换的SQL语句。

因此,RELATIONAL不是Oracle的事情,它是由用户创建的对象。它是一个具有owner.table参数的函数。


2
如果它是用户创建的功能,那么它不应该出现在DBA_OBJECTS中吗?
Frank Schmitt
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.