Что означает «выбрать * из реляционного (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, но такой функции / оператора / чего бы то ни было нет.

Поиск в Google для «SELECT * FROM RELATIONAL» вернул только вопросы, связанные с ORA-01555.

Итак, мой вопрос: что означает здесь ключевое слово RELATIONAL?

Фрэнк Шмитт
источник
2
Кажется, это что-то глубоко внутреннее. Потому что support.oracle.com также показывает только ту информацию, которую вы уже погуглили.
Миндаугас Риауба
2
Я на 99% уверен, что это для запроса типа данных XMLTYPE, но я не могу найти ссылку, так как, очевидно relational, это очень трудное слово для поиска документации по БД.
Гай
1
@Gaius Я не думаю, что это связано с XMLTYPE (таблица не содержит столбец XMLTYPE).
Фрэнк Шмитт
1
Нашел это, может помочь: forums.oracle.com/thread/1042943?start=0&tstart=0
Iľja
измените свой параметр undo_retention
user3556458

Ответы:

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;
durette
источник
0

Я считаю, что это устаревший псевдоним сегодняшней функции TABLE для конвейерных функций, но сейчас я не могу найти свою ссылку, которая говорит об этом.

durette
источник
0

Согласно этой статье блога, конкретный совет RELATIONALуказывает оптимизатору запросов:

... преобразовать объект в реляционную таблицу, аналогичную функции RELATIONAL ...

Вторая статья в Oracle сообществе утверждает , что

Подсказка RELATIONAL заставляет Oracle откатывать данные объекта и вставлять данные атрибута, а не объект. Используемые подсказки могут использоваться только Oracle - поэтому они недокументированы ...

Я думаю, что это просто проблема долго выполняющегося запроса, который обнаруживается ошибкой ORA-01555 при внутреннем использовании подсказки запроса, которая не документирована.

Джон ака hot2use
источник
Подсказки к запросу вложены в / * блоки комментариев * /. Похоже, это что-то еще.
дуретта
0

Как продемонстрировал durette, это бесполезный актерский состав. Большинство таблиц являются ОТНОСИТЕЛЬНЫМИ, и это по умолчанию. Однако Oracle также поддерживает таблицы OBJECT (см. Синтаксис в документации Oracle CREATE TABLE ), что объясняет причину внутреннего синтаксиса. Нет никаких причин использовать RELATIONAL в запросе, но также нет причин для его сбоя. Вы должны сосредоточиться на общих исправлениях для ORA-01555. ORA-01555 обычно означает, что ваши сегменты UNDO недостаточны для обработки скорости изменения в вашей базе данных.

Вы можете воспроизвести эту ошибку по требованию? В каком журнале выполняется ошибочный запрос до его сбоя? Или ваш реальный вопрос: «Как мне отследить SQL, вызвавший эту ошибку?»

Кроме того, вы не указали свою версию Oracle и уровень исправления.

Гордон Хоппер
источник
2
Вы, конечно, понимаете, что этому вопросу почти шесть лет.
mustaccio
Мне не было интересно починить ORA-01555 (я знаю, как это сделать, как я уже упоминал в своем вопросе). Меня просто заинтересовал странный РЕЛЯЦИОННЫЙ вызов / синтаксис функции, но мое любопытство с годами уменьшилось :-)
Фрэнк Шмитт
1
Если вы больше не хотите оставлять отзывы по этому вопросу, вы можете удалить его или принять ответ. Пока обмен стека считает этот вопрос без ответа, он будет продолжать побуждать людей помочь.
Гордон Хоппер
-3

Строка ниже «ORA-01555, вызванная оператором SQL ниже», является оператором SQL, вызывающим замену UNDO.

Таким образом, RELATIONAL - это не вещь Oracle, это объект, созданный пользователем. Это функция с параметром owner.table.

Пифия Дельфи
источник
2
Если бы это была функция, созданная пользователем, не должна ли она присутствовать в DBA_OBJECTS?
Фрэнк Шмитт