Qual é o significado de "select * from relational (owner.table)"?

8

Recentemente, recebemos alguns erros em nosso registro de alertas do formulário

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

Eu sei como lidar com erros ORA-01555, mas nunca encontrei algo parecido SELECT * FROM RELATIONAL. Eu olhei DBA_OBJECTS, mas não existe essa função / operador / qualquer coisa.

A pesquisa no Google 'SELECT * FROM RELACIONAL' retornou apenas perguntas relacionadas ao ORA-01555.

Então, minha pergunta é: Qual é o significado da palavra-chave RELACIONAL aqui?

Frank Schmitt
fonte
2
Parece que isso é algo profundamente interno. Porque support.oracle.com também mostra apenas as mesmas informações que você já pesquisou no Google.
Mindaugas Riauba
2
Tenho 99% de certeza de que isso é para consultar o tipo de dados XMLTYPE, mas não consigo encontrar a referência, pois obviamente relationalé uma palavra muito difícil de pesquisar na documentação do banco de dados.
Gaius
11
@ Gaius Eu não acho que isso esteja relacionado ao XMLTYPE (a tabela não contém uma coluna XMLTYPE).
24513 Frank Schmitt
11
Encontrado isso, pode ajudar: forums.oracle.com/thread/1042943?start=0&tstart=0
Enviado em
alterar seu parâmetro undo_retention
user3556458

Respostas:

1

Parece estar inerte. Testei isso no XE 11 e descobri que não faz nada.

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
fonte
0

Acredito que esse foi um alias descontinuado da função TABLE de hoje para funções em pipeline, mas agora não consigo encontrar minha referência que diz isso.

durette
fonte
0

De acordo com este artigo do blog, a dica específica RELATIONALinstrui o Query Optimizer a

... converte o objeto em uma tabela relacional, semelhante à função RELACIONAL ...

Um segundo artigo na Comunidade Oracle afirma que

A dica RELACIONAL faz com que o Oracle anule os dados do objeto e insira os próprios dados do atributo, em vez do objeto. As dicas usadas só podem ser usadas pelo Oracle - e é por isso que não são documentados ...

Eu acho que isso é apenas um problema de uma consulta de longa execução, que está sendo exposta pelo erro ORA-01555 enquanto usa internamente uma dica de consulta, que não é documentada.

John aka hot2use
fonte
As dicas de consulta estão aninhadas em / * blocos de comentários * /. Isso parece ser outra coisa.
Durette
0

Como demonstrado por durette, esse elenco é inútil. A maioria das tabelas é RELACIONAL, e esse é o padrão. No entanto, o Oracle também suporta tabelas OBJECT (consulte a sintaxe nos documentos CREATE TABLE do Oracle ), o que explica o motivo da sintaxe interna. Não há motivo para usar RELACIONAL em uma consulta, mas também não há motivo para que ela falhe. Você deve se concentrar nas correções gerais para ORA-01555. ORA-01555 geralmente significa que seus segmentos UNDO não são suficientes para lidar com a taxa de alteração em seu banco de dados.

Você consegue reproduzir esse erro sob demanda? Como o log a consulta incorreta é executada antes de falhar? Ou é sua verdadeira pergunta: "Como localizo o SQL que causou esse erro?"

Além disso, você não especificou sua versão do Oracle e nível de patch.

Gordon Hopper
fonte
2
Você percebe, é claro, que a pergunta tem quase seis anos.
mustaccio
Eu não estava interessado em consertar o ORA-01555 (eu sei como fazer isso, como mencionei na minha pergunta). Eu estava apenas interessado no estranho RELATIONAL chamada de função / sintaxe, mas minha curiosidade tem diminuído ao longo dos anos :-)
Frank Schmitt
11
Se você não quiser mais comentários sobre esta pergunta, exclua-a ou aceite uma resposta. Enquanto a troca de pilhas considerar esta pergunta sem resposta, ela continuará solicitando às pessoas que ajudem.
Gordon Hopper
-3

A linha abaixo "ORA-01555 causada pela instrução SQL abaixo" é a instrução SQL que está causando a troca do UNDO.

Portanto, RELACIONAL não é algo do Oracle, é um objeto criado por um usuário. É uma função com o parâmetro owner.table.

Pythia Delphi
fonte
2
Se fosse uma função criada por um usuário, ela não deveria estar presente em DBA_OBJECTS?
Frank Schmitt