2016-07-13 8 views
-1

Dies ist Oracle Trigger mysql:Wie Oracle konvertieren löst

CREATE OR REPLACE TRIGGER "SW_TARIFF_TARIFF_TRIGGER" 
BEFORE INSERT OR UPDATE OF "LAST_UPDATED_DT" ON "DEMO_DB"."SOLID_WASTE_TARIFF_MASTER" 
REFERENCING OLD AS "OLD" NEW AS "NEW" 
FOR EACH ROW 
BEGIN 
    :NEW.LAST_UPDATED_DT := SYSDATE; 
END; 

ich es mysql verschieben möchten. Aber ich weiß nicht, dass ich Cretae schreibe und durch einen Auslöser ersetzen und auch Problem mit mysql Ersatz für Schlüsselwort von Orakel habe. Kann mir jemand vorschlagen, wie man diesen Oracle Trigger zu mysql konvertiert?

Antwort

3

In MySql müssen Sie zwei separate Auslöser erstellen, einen ersten Auslöser BEFORE INSERT und einen zweiten Auslöser BEFORE UPDATE.
MySql unterstützt diese Klausel nicht UPDATE OF column_name - das ist der Auslöser wird nur ausgelöst, wenn eine Änderung der angegebenen Spalte aufgetreten ist. In MySql wird der Trigger immer ausgelöst, und Sie müssen diese Bedingung selbst in einem Körper des Trugger erkennen.

Versuchen:

CREATE TRIGGER SW_TARIFF_TARIFF_TRIGGER1 
BEFORE INSERT ON SOLID_WASTE_TARIFF_MASTER 
FOR EACH ROW 
    SET NEW.LAST_UPDATED_DT := Now(); 

und diese:

CREATE TRIGGER SW_TARIFF_TARIFF_TRIGGER2 
BEFORE UPDATE ON SOLID_WASTE_TARIFF_MASTER 
FOR EACH ROW 
BEGIN 
    IF NEW.LAST_UPDATED_DT <> OLD.LAST_UPDATED_DT 
     AND NEW.LAST_UPDATED_DT IS NOT NULL 
     AND OLD.LAST_UPDATED_DT IS NOT NULL 
     OR NEW.LAST_UPDATED_DT IS NULL AND OLD.LAST_UPDATED_DT IS NOT NULL 
     OR NEW.LAST_UPDATED_DT IS NOT NULL AND OLD.LAST_UPDATED_DT IS NULL 
    THEN 
     SET NEW.LAST_UPDATED_DT := Now(); 
    END IF; 
END; 

Dieser schreckliche IF erkennt Zustand, wenn die Spalte LAST_UPDATED geändert wurde (es simuliert UPDATE OF "LAST_UPDATED_DT" Klausel von Oracle)

in der Dokumentation Bitte Weitere Informationen über Trigger in MySql: http://dev.mysql.com/doc/refman/5.7/en/create-trigger.html

https://dev.mysql.com/doc/refman/5.5/en/trigger-syntax.html

Verwandte Themen