Oracle SQL – Verstehen, wie die Dual-Tabelle ihre Magie ausübt

Bei der Erstellung einer kleinen Testtabelle stolperte ich online über den folgenden Artikel: ( http://www.techonthenet.com/sql/insert.php ) Hier finden Sie die folgende Lösung zum Einfügen mehrerer Zeilen fester Werte in Oracle :

Insert All Into testTable (key, field1, field2) Values (1, 10, 'a') Into testTable (key, field1, field2) Values (2, 20, 'b') Into testTable (key, field1, field2) Values (3, 30, 'c') Into testTable (key, field1, field2) Values (4, 40, 'd') Select * from dual; 

Die Verwendung von Dual war etwas, was ich vorher noch nicht gesehen hatte und so begann ich ein wenig zu recherchieren, um zu verstehen, wie es funktioniert. Ich verstehe, dass diese Tabelle eine Umgehungsmöglichkeit für bestimmte Oracle-Syntax ist, aber wie sie diese Aufgaben ausführt, klickt immer noch nicht für mich. Ich bin mir bewusst, dass andere eine ähnliche Frage gestellt haben ( Wie funktioniert Oracle SELECT FROM dual mit mehreren Feldern ), aber ich muss noch jemanden sehen, der erklärt, was sich unter der Haube abspielt.

  • Ist das ein referencetrick, den sie mit einer Tabelle mit einem einzigen Wert ausführen können, oder sind bestimmte functionen in Oracle nur so programmiert, dass sie sich anders verhalten, wenn sie die Doppeltabelle sehen?

  • Genauer gesagt, wie ermöglicht das Verweisen darauf, dass der obige Code im Wesentlichen mehrere Into … Values ​​… -statementen durchläuft?

Kann mir das jemand erklären?

Solutions Collecting From Web of "Oracle SQL – Verstehen, wie die Dual-Tabelle ihre Magie ausübt"

functional ist dual nur eine einzeilige Tabelle, auf die man sich immer verlassen kann und die immer genau eine Zeile hat. Sie könnten genauso einfach Ihre eigene einzeilige Tabelle erstellen und diese anstelle von dual . Oder Sie könnten eine Abfrage verwenden, von der Sie wissen, dass sie immer 1 Zeile select * from all_objects where rownum < 2 (dh select * from all_objects where rownum < 2 ).

Hinter den Kulissen ist Oracle in der Lage, Abfragen gegen dual ein bisschen mehr zu optimieren als gegen eine einzeilige Tabelle, die Sie erstellen. Der Optimierer weiß, dass die Tabelle immer genau 1 Zeile hat, um darauf basierend Dinge zu optimieren. Und Oracle kann potenziell die Notwendigkeit eliminieren, sogar den Tisch mit einer "schnellen dualen" Operation zu erreichen, um logische I / O zu vermeiden. Diese Optimierungen sind nicht die Art von Dingen, die Sie in einer Abfrage wie dieser bemerken werden. Sie sind potentiell nützlich, wenn Sie etwas tun, wie zum Beispiel dual in einer engen loop zu schlagen, um eine Vielzahl von Ausdrücken zu berechnen.

In diesem Fall existiert das select * from dual nur, weil eine INSERT statement mit mehreren Tabellen eine Abfrage als Quelle benötigt. Wenn Sie eine INSERTINSERT mehreren Tabellen INSERT , würden Sie normalerweise die data aus einer Quelle auswählen und einige oder alle data in mehrere Tabellen insert. In diesem Fall verwenden Sie jedoch nicht die data, die aus der SELECT statement stammen, also ist es egal, was Sie auswählen oder wofür Sie die data auswählen.