INSERT INTO SELECT FROM ... Endlosschleife ?!



  • Moin!

    Ist das normal, das folgendes Statement eine Endlosschleife verursacht? (Quell und Zieltabelle sind gleich)

    insert into tabelle (feld1,feld2,feld3) 
    select (feld1,feld2,feld3) from tabelle
    

    Nach meinem Verständnis sollte doch lediglich einmal der Inhalt der Tabelle verdoppelt werden, oder? Das Insert-Select ist doch ein "Schnappschuss" der Tabellendaten zum Zeitpunkt der Abfrage oder nicht? Unter Firebird 2.1 führt das zu einer Endlosschleife 😕



  • Ich habe jetzt mal in der Ansi-Spezifikation nachgeschaut bin aber nicht so richtig schlau draus geworden. Es scheint aber ein Fehlverhalten zu sein, Deine Vorstellung von der Materie scheint richtig zu sein.
    Möglicherweise hat das System ein Problem damit dass es keinen Primärschlüssel gibt?
    Wenn es ihn gibt mußt Du ihn als Workaround in einem Subselect der Select-Klausel anfügen.



  • Sorry, der Code da oben war pseudo: Es gibt einen Primärschlüssel, den hab ich beim Einfügen über einen Generator (gen_id ... ) erzeugt.
    (edit)
    Habs auch unter Oracle 10 versucht, da gehts. Ich werd das mal an den Firebird Support weitergeben ^^



  • In Postgres läuft es auch, MySQL verbietet -in weiser Voraussicht- Ergebistabelle == Quelltybelle.
    Ich würde es nicht unbedint melden da sie wahrscheinlich zu ihren Fehlern stehen:
    http://ibexpert.net/ibe/index.php?n=Doc.DML-DataManipulationLanguage
    dort nach "Important: It is legal to select fro" ... suchen

    Also den maximalen Primärschlüsselwert ermitteln und ihn in einer Where-Klausel des Select-Stmts als Begrenzung verwenden.


Log in to reply