Was bedeutet "select * from relational (owner.table)"?

8

Wir haben kürzlich einige Fehler in unserem Warnprotokoll des Formulars erhalten

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

Ich weiß, wie man mit ORA-01555-Fehlern umgeht, aber ich bin noch nie auf so etwas gestoßen SELECT * FROM RELATIONAL. Ich habe reingeschaut DBA_OBJECTS, aber es gibt keine solche Funktion / Operator / was auch immer.

Beim Googeln nach 'SELECT * FROM RELATIONAL' wurden nur Fragen zu ORA-01555 zurückgegeben.

Meine Frage lautet also: Was bedeutet das Schlüsselwort RELATIONAL hier?

Frank Schmitt
quelle
2
Es scheint, dass dies etwas zutiefst Inneres ist. Denn support.oracle.com zeigt auch nur die gleichen Informationen an, die Sie bereits gegoogelt haben.
Mindaugas Riauba
2
Ich bin zu 99% sicher, dass dies zum Abfragen des XMLTYPE-Datentyps dient, aber ich kann die Referenz nicht finden, da es offensichtlich relationalein sehr schwieriges Wort ist, nach DB-Dokumentation zu suchen.
Gaius
1
@Gaius Ich glaube nicht, dass es sich um XMLTYPE handelt (die Tabelle enthält keine XMLTYPE-Spalte).
Frank Schmitt
1
Fand dies, könnte helfen: forums.oracle.com/thread/1042943?start=0&tstart=0
Iľja
Ändern Sie Ihren Parameter undo_retention
user3556458

Antworten:

1

Es scheint träge zu sein. Ich habe dies auf XE 11 getestet und festgestellt, dass es nichts tut.

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

Ich glaube, dies war ein veralteter Alias ​​für die heutige TABLE-Funktion für Pipeline-Funktionen, aber jetzt kann ich meine Referenz, die dies sagt, nicht finden.

Durette
quelle
0

Laut diesem Blog-ArtikelRELATIONAL weist der spezifische Hinweis das Abfrageoptimierungsprogramm an

... konvertiert das Objekt in eine relationale Tabelle, ähnlich der RELATIONAL-Funktion ...

Ein zweiter Artikel in der Oracle Community besagt dies

Der RELATIONAL-Hinweis bewirkt, dass Oracle die Objektdaten nicht mehr überprüft und die Attributdaten selbst anstelle des Objekts einfügt. Die verwendeten Hinweise können nur von Oracle verwendet werden - weshalb sie nicht dokumentiert sind ...

Ich denke, dies ist nur ein Problem einer lang laufenden Abfrage, die durch den ORA-01555-Fehler aufgedeckt wird, während intern ein Abfragehinweis verwendet wird, der nicht dokumentiert ist.

John aka hot2use
quelle
Abfragehinweise sind in / * Kommentarblöcken * / verschachtelt. Dies scheint etwas anderes zu sein.
Durette
0

Wie Durette zeigt, ist dies eine nutzlose Besetzung. Die meisten Tabellen sind RELATIONAL, und das ist die Standardeinstellung. Oracle unterstützt jedoch auch OBJECT-Tabellen (siehe die Syntax in den CREATE TABLE-Dokumenten von Oracle ), in der der Grund für die interne Syntax erläutert wird. Es gibt keinen Grund, RELATIONAL in einer Abfrage zu verwenden, aber es gibt auch keinen Grund, warum dies fehlschlägt. Sie sollten sich auf die allgemeinen Korrekturen für ORA-01555 konzentrieren. ORA-01555 bedeutet normalerweise, dass Ihre UNDO-Segmente nicht ausreichen, um die Änderungsrate in Ihrer Datenbank zu verarbeiten.

Können Sie diesen Fehler bei Bedarf reproduzieren? Wie protokolliert die fehlerhafte Abfrage, bevor sie fehlschlägt? Oder ist Ihre eigentliche Frage: "Wie finde ich die SQL, die diesen Fehler verursacht hat?"

Außerdem haben Sie Ihre Oracle-Version und Patch-Version nicht angegeben.

Gordon Hopper
quelle
2
Sie erkennen natürlich, dass die Frage fast sechs Jahre alt ist.
Mustaccio
Ich war nicht daran interessiert, den ORA-01555 zu reparieren (ich weiß, wie das geht, wie ich in meiner Frage erwähnt habe). Ich war nur an dem seltsamen RELATIONALEN Funktionsaufruf / der seltsamen Syntax interessiert, aber meine Neugier hat im Laufe der Jahre nachgelassen :-)
Frank Schmitt
1
Wenn Sie zu dieser Frage kein Feedback mehr wünschen, können Sie sie löschen oder eine Antwort akzeptieren. Solange der Stapelaustausch diese Frage als unbeantwortet betrachtet, werden die Leute weiterhin aufgefordert, zu helfen.
Gordon Hopper
-3

Die Zeile unter "ORA-01555 verursacht durch SQL-Anweisung unten" ist die SQL-Anweisung, die das UNDO zum Austauschen veranlasst.

RELATIONAL ist also keine Oracle-Sache, sondern ein von einem Benutzer erstelltes Objekt. Es ist eine Funktion mit dem Parameter owner.table.

Pythia Delphi
quelle
2
Wenn es sich um eine von einem Benutzer erstellte Funktion handelt, sollte sie nicht in DBA_OBJECTS vorhanden sein?
Frank Schmitt