Qual è il significato di "select * from relational (owner.table)"?


8

Recentemente abbiamo riscontrato alcuni errori nel nostro registro degli avvisi del modulo

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

So come gestire gli errori ORA-01555, ma non ho mai incontrato qualcosa di simile SELECT * FROM RELATIONAL. Ho guardato dentro DBA_OBJECTS, ma non esiste una tale funzione / operatore / qualunque cosa.

Googling per "SELECT * FROM RELATIONAL" ha restituito solo domande relative a ORA-01555.

Quindi, la mia domanda è: qual è il significato della parola chiave RELATIONAL qui?


2
Sembra che questo sia qualcosa di profondamente interno. Perché support.oracle.com mostra anche solo le stesse informazioni che hai già cercato su Google.
Mindaugas Riauba,

2
Sono sicuro al 99% che questo è per l'interrogazione del tipo di dati XMLTYPE, ma non riesco a trovare il riferimento poiché ovviamente relationalè una parola molto difficile da cercare nella documentazione del DB.
Gaius,

1
@Gaius Non penso che sia correlato a XMLTYPE (la tabella non contiene una colonna XMLTYPE).
Frank Schmitt,

1
Trovato questo, potrebbe aiutare: forums.oracle.com/thread/1042943?start=0&tstart=0
Iľja

modifica il parametro undo_retention
user3556458

Risposte:


1

Sembra essere inerte. Ho provato questo su XE 11 e ho scoperto che non fa nulla.

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

Credo che questo sia stato un alias deprecato della funzione TABLE di oggi per le funzioni pipeline, ma ora non riesco a trovare il mio riferimento che dice questo.


0

Secondo questo articolo del blog, il suggerimento specifico RELATIONALindica lo Strumento per ottimizzare le query

... converte l'oggetto in una tabella relazionale, simile alla funzione RELATIONAL ...

Un secondo articolo della Oracle Community afferma che

Il suggerimento RELAZIONALE fa sì che Oracle annulli i dati dell'oggetto e inserisca i dati degli attributi stessi anziché l'oggetto. I suggerimenti utilizzati possono essere utilizzati solo da Oracle, motivo per cui non sono documentati ...

Penso che questo sia solo un problema di una query di lunga durata, che viene esposta dall'errore ORA-01555 mentre internamente utilizza un suggerimento di query, che non è documentato.


I suggerimenti per le query sono nidificati in / * blocchi di commenti * /. Questo sembra essere qualcos'altro.
Durette,

0

Come dimostrato da Durette, questo è un cast inutile. La maggior parte delle tabelle sono RELAZIONALI e questa è l'impostazione predefinita. Tuttavia, Oracle supporta anche le tabelle OBJECT (consultare la sintassi dei documenti CREATE TABLE di Oracle ), che spiega il motivo della sintassi interna. Non vi è alcun motivo per utilizzare RELATIONAL in una query, ma non esiste alcun motivo per il fallimento. Dovresti concentrarti sulle correzioni generali per ORA-01555. ORA-01555 di solito significa che i segmenti UNDO non sono sufficienti per gestire il tasso di variazione nel database.

Sei in grado di riprodurre questo errore su richiesta? Come viene eseguita la query offensiva prima che fallisca? O è la tua vera domanda, "Come posso rintracciare l'SQL che ha causato questo errore?"

Inoltre, non hai specificato la versione di Oracle e il livello di patch.


2
Ti rendi conto, ovviamente, che la domanda ha quasi sei anni.
Mustaccio

Non ero interessato a riparare ORA-01555 (so come farlo, come ho già detto nella mia domanda). Ero solo interessato alla strana chiamata / sintassi della funzione RELATIONAL, ma la mia curiosità è diminuita nel corso degli anni :-)
Frank Schmitt,

1
Se non desideri più feedback su questa domanda, puoi eliminarla o accettare una risposta. Finché lo scambio di stack considera questa domanda senza risposta, continuerà a spingere le persone ad aiutare.
Gordon Hopper,

-3

La riga sotto "ORA-01555 causata dall'istruzione SQL di seguito" è l'istruzione SQL che causa lo scambio dell'UNDO.

Quindi RELATIONAL non è una cosa di Oracle, è un oggetto creato da un utente. È una funzione con il parametro owner.table.


2
Se fosse una funzione creata da un utente, non dovrebbe essere presente in DBA_OBJECTS?
Frank Schmitt,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.