Announcement

Collapse
No announcement yet.

Trigger

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

  • Trigger

    Code:
    connect alf/alf@orcl
    
    DROP TRIGGER tri_logon;
    
    CREATE TRIGGER tri_logon
        AFTER LOGON
        ON SCHEMA
    DECLARE
         fehler EXCEPTION;
         PRAGMA EXCEPTION_INIT (fehler, -942);
    BEGIN
         EXECUTE IMMEDIATE 'DROP TABLE artikel';
         RAISE fehler;
    
    EXCEPTION
          WHEN fehler
              THEN EXECUTE IMMEDIATE
       'CREATE TABLE artikel ( id number, name varchar2(10) )';
    END;
    /
    
    show errors
    
    connect alf/alf@orcl
    
    INSERT INTO artikel values(1,'Brot');
    commit;
    
    SELECT * FROM artikel;
    Leider funktioniert dieser Trigger nicht, da die Tabelle artikel nicht gelöscht wird.
    Der Trigger selber wurde ohne Fehler unter Oracle 10g erstellt.

    kuemmelchen

  • #2
    Unberücksichtigt der vielen Warnungen solche DDL in Triggern zu tun?
    Auf einem Produktivsystem würde ich solche Trigger nicht bauen...
    Bei mir klappt es nach:
    Code:
    connect alf/alf@orcl
    
    exec DBMS_STATS.gather_table_stats('ALF','ARTIKEL');
    
    INSERT INTO artikel values(1,'Brot');
    
    COMMIT;
    Zuletzt editiert von jum; 13.01.2011, 18:52.

    Comment


    • #3
      Oh Gott. Ein Logontrigger mit DDL

      Wieso machtst Du das?

      Wenn Du für jede Anmeldung eine immer leere Tabelle für einen User haben möchtest, dann leg dir eine Global Temporary Table mit der Option ON COMMIT PRESERVE ROWS an und Du hast den gleichen Effekt - nur sauber.

      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

      Working...
      X