Announcement

Collapse
No announcement yet.

procedure aus einer procedure heraus starten^

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

  • procedure aus einer procedure heraus starten^

    hallo,

    möchte eine art ober-procedure schreiben (diese wird dann mittels dba-job immer um mitternacht angestoßen), welche u.a. einen trigger löscht und eine andere procedure startet:
    bisheriger code:

    create or replace procedure pr_WEITERLEITUNG_QUITTIERUNG is

    begin

    execute immediate
    'drop trigger TR_NACHRICHT_INSERT';

    execute immediate
    'TR_NACHRICHT_INSERT_CREATE';

    end;

    leider erscheint die fehlermeldung:
    ORA-00900: invalid SQL statement in line 8 (muesste die zweite execute immediate zeile sein)...

    danke
    christoph

  • #2
    Habs bei mir ausprobiert und sollte funktionieren.
    <br>
    lt. Doku:
    <br>
    ORA-00900 invalid SQL statement
    Cause: The statement is not recognized as a valid SQL statement. This error can
    occur if the Procedural Option is not installed and a SQL statement is issued
    that requires this option (for example, a CREATE PROCEDURE statement). You
    can determine if the Procedural Option is installed by starting SQL*Plus. If the
    PL/SQL banner is not displayed, then the option is not installed.
    Action: Correct the syntax or install the Procedural Option
    <br>
    das heißt für mich, daß der Benutzer unter dem der Trigger gedrop werden soll keine berechtigung besitzt oder nicht sieht, da der Name des Triggers unqualifiziert ist.
    <br>
    Prinzipiell würde ich mir aber die Logik überlegen.
    Um eine Aktion auf der DB ausführen zu können ein drop von einem DB Objekt zu machen, würde ich als falsches Design oder Methode bezeichnen.
    <br>
    Was hälst Du von einem Disablen vom Trigger??
    <br>
    alter trigger TR_NACHRICHT_INSERT disable;
    <br>
    lg Dietma

    Comment


    • #3
      hallo,

      erstmal danke...

      "das heißt für mich, daß der Benutzer unter dem der Trigger gedrop werden soll keine berechtigung besitzt oder nicht sieht, da der Name des Triggers unqualifiziert ist."
      -> der fehler tritt ja erst in zeile acht auf => das droppen des triggers funktioniert einwandfrei...

      das problem ist (wie beschrieben) das ausführen der procedure..

      kann mir nicht vorstellen, dass die procedureal option nicht installiert ist, da ich sonst ja ganz normal proceduren erstellen und ausführen kann....

      "Prinzipiell würde ich mir aber die Logik überlegen. Um eine Aktion auf der DB ausführen zu können ein drop von einem DB Objekt zu machen, würde ich als falsches Design oder Methode bezeichnen.
      Was hälst Du von einem Disablen vom Trigger?? "

      den trigger einfach disablen tuts leider nicht:
      die tabelle, auf welche sich der trigger bezieht wird vorher beim tageswechsel umbenannt und damit zieht auch der trigger um... dieser muss sich nach dem tageswechsel auf eine neu erstellte tabelle beziehen => drop und neu erstelle

      Comment


      • #4
        Ich habe die Zeilen nicht gezählt, aber die Überschrift hätte es mir sagen müssen!

        In PLSQL werden proceduren einfach durch Ihren Namen ausfgerufen. Es ist kein Exec immed nötwenig! Und dann bekommst Du auch entsprechende Fehlermedungen, wenn was nicht paßt. ( Parameter, Berechtignungen,...)

        lg Dietma

        Comment


        • #5
          hallo,

          danke wiederum...

          hier nochmal der richtige code, damit andere foren leser auch einfacher was mit dem beitrag anfangen können:

          create or replace procedure pr_WEITERLEITUNG_QUITTIERUNG is

          begin

          execute immediate
          'drop trigger TR_NACHRICHT_INSERT';

          TR_NACHRICHT_INSERT_CREATE;

          end

          Comment

          Working...
          X