Announcement

Collapse
No announcement yet.

NEW - operator in Interbase / Buch Interbase v. A. Kosch

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • NEW - operator in Interbase / Buch Interbase v. A. Kosch

    Hallo Herr Kosch,<BR>
    ich versuche die SQL-Skripte in der IBConsole umzusetzen, bekomme jedoch bei der Verwendung von NEW.Spaltenname ein Fehlermeldung, dass es diese Spalte nicht gibt. Ist die Anweisung NEW nicht Standard, oder was kann ich machen um diese einzusetzen, da ich die ganze Trigger (before Insert usw.) sonst nicht nutzen lassen. <P>
    Verwende IBConsole 1.0.0.326 bzw IB Exptert 1.2.0.92 es funktionert aber bei beiden nicht, obwohl im Expert immerhin das NEW fettgedruckt und als SChluessewort erkannt wird. Hier die Zeile: <BR>
    <PRE>
    BEGIN <BR>
    UPDATE "tbWartTat" SET AUSG = NEW.AUSG; <BR>
    END <BR>
    </PRE>

  • #2
    Hallo,

    ich kann das Problem nicht nachvollziehen (IBConsole 1.0.1.344). Mit dem Beispiel-Script <i></i> aus dem InterBase-Buch wird der folgende Trigger problemlos angelegt (nur die Zeile <i>SET NAMES ISO8859_1;</i> muss am Anfang entfernt werden):
    <pre>
    CREATE TRIGGER BEITRAGTERMINID FOR BEITRAG BEFORE INSERT AS
    BEGIN
    IF (NEW.TERMINNR IS NULL) THEN NEW.TERMINNR = GEN_ID(GEN_TERMINID,1);
    IF (NEW.TERMINWARNUNG IS NULL) THEN NEW.TERMINWARNUNG = 'N';
    EXECUTE PROCEDURE INSERTBELEG NEW.AUSGABEID, NEW.MANUSKRIPTID;
    END
    ^
    </pre&gt

    Comment


    • #3
      Hmm...
      hab bei IBConsole-InteractiveSQl den Client-Dialect '3' eingetragen. Reicht dies für die 'NEW'- anweisung?
      Gruss Frank Ambie

      Comment


      • #4
        Hallo,

        der SQL Dialect 3 hat nichts mit dem NEW-Zugriff zu tun, sondern regelt an dieser Stelle die Behandlung der sogenannten <i>Delimited Identifiers</i>. Beim SQL Dialect 3 sind die doppelten Anführungszeichen den Bezeichnernnamen vorbehalten, während beim Dialect 1 die einfachen und doppelten Anführungezeichen ein String-Literal kennzeichnen. Die Fehlermeldung bezieht sich also nicht auf den letzten Teil, sondern auf den Ersten (Tabelle "tbWartTat" )

        Comment


        • #5
          Hallo Frank,<br><br>
          Versuch mal einen Doppelpunkt voranzustellen:<br><br>
          UPDATE "tbWartTat" SET AUSG = :NEW.AUSG;<br><br>
          Gruss,<br>
          Thomas Steinmaurer<br>
          IB LogManager 2.1 - The Logging/Auditing Tool for InterBase and Firebird<br>
          http://www.iblogmanager.com<br&gt
          Thomas Steinmaurer

          Firebird Foundation Committee Member
          Upscene Productions - Database Tools for Developers
          Mein Blog

          Comment


          • #6
            <pre>BEGIN
            UPDATE "tbWartTat" SET AUSG = NEW.AUSG;
            END</pre>

            @Thomas
            : ist es nicht

            @Frank

            was soll denn da passieren, wie sieht denn der ganze Trigger aus?

            Wenn es ein Trigger der Tabelle tbWartTat ist scheint, es sinnlos, weil dann alle Zeilen von tbWartTat in der Spalte ausg auf new.ausg gesetzt werden, zudem bewirkt dies in einem Update Trigger eine endlos schleife

            Wenn dies kein Trigger von tbWart ist, hat dann die Tabelle um die es geht überhaupt eine Spalte Ausg.

            Also wie sieht der ganze Trigger aus? Was hast Du vor? Ich vermute ein konzeptionelles Problem

            Comment

            Working...
            X