Announcement

Collapse
No announcement yet.

10g-Trigger: ganzen ds mit :NEW referenzieren

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

  • 10g-Trigger: ganzen ds mit :NEW referenzieren

    moin,

    folgende situation:

    ich möchte innerhalb eines triggers (after insert or update each row) den gesamten datensatz referenzieren können um ihn an eine package-procedure zu übergeben.

    z.B.:

    CREATE OR REPLACE TRIGGER <Trigger_Name>
    AFTER INSERT OR UPDATE ON <Table_Name> FOR EACH ROW
    BEGIN

    package_name.procedure(:aktueller_datensatz);

    END;
    /


    hat einer von euch die lösung parat?
    oder muss ich tatsächlich jede column einzeln refernzieren und in eine ROWTYPE-Variable überführen?

    danke

    jogi

  • #2
    oder muss ich tatsächlich jede column einzeln refernzieren
    Ich fürchte ja.

    Dim
    Zitat Tom Kyte:
    I have a simple philosophy when it comes to the Oracle Database: you can treat it as a black box and just stick data into it, or you can understand how it works and exploit it as a powerful computing environment.

    Comment


    • #3
      Originally posted by dimitri View Post
      Ich fürchte ja.

      Dim
      SHIT! but it happens

      bei einem INSERT kann ich jede column mit :NEW ansprechen...

      erhalte ich denn beim UPDATE ebenfalls alle values, oder nur die wirklich :NEW sind?

      weiterhin stellt sich die frage, gibt es die möglichkeit gibt in einem LOOP über die columns zu "maschieren". unsere Tabellen haben teilweise bis zu 500 columns.

      würde da gern mit generischem code ran gehen....

      thx jogi

      Comment


      • #4
        Bei einem Update hast Du über : old auch die alten Werte, die jetzt im UNDO Tablespace sind.

        Generisch kannst Du das machen, indem Du über user_tab_columns selektierst.
        Fraglich ist allerdings, ob das wartbarer Code wird, denn die PL/SQL Procedure mit 500 Parametern (ich kann mir vorstellen, dass es auch dort ein Limit gibt) musst Du ja auch noch machen.

        Je nachdem was Du machen möchtes, wäre es auch eine Möglichkeit nur den PK in eine eigene Tabelle wegzuschreiben und dann im Nachgang zu einem bestimmten Zeitpunkt X die Daten anhand dieser PKs zu verarbeiten.

        Wie sieht denn die Anforderung an diesen Trigger aus?

        Dim
        Zitat Tom Kyte:
        I have a simple philosophy when it comes to the Oracle Database: you can treat it as a black box and just stick data into it, or you can understand how it works and exploit it as a powerful computing environment.

        Comment


        • #5
          Originally posted by dimitri View Post
          Bei einem Update hast Du über : old auch die alten
          ja...habs ausprobiert.
          selbst mit :NEW bekommst du den alten inhalt des UPDATE datensatzes.


          Originally posted by dimitri View Post
          Wie sieht denn die Anforderung an diesen Trigger aus?
          wir arbeiten hier an einer steuerungsmimik für mechanische abläufe...
          da diese sehr produktionsnah sind, brauchen wir eine echtzeit-überwachung.
          diese muss jedoch so flexibel sein, dass wir sie auf jede tabelle loslassen (konfigurieren) können wollen!
          die information muss schnellst möglich an einen DB-Job übertragen werden.
          dieser weis was er mit dem DS anzufangen hat!

          komplex...aber ich sehe gerade land am horizont

          danke für deine antworten

          jogi

          Comment

          Working...
          X