sql >> Databasteknik >  >> RDS >> Oracle

Oracle Trigger på kapslade bord

Du kan inte definiera en utlösare som "INNAN UPPDATERING PÅ Museum.EmployeeList.födelsedatum" Men du kan skriva en normal utlösare INNAN UPPDATERING PÅ Museum och i triggerkroppen kan du loopa över alla anställda som kontrollerar datumet.

Prova den här:

CREATE OR REPLACE TRIGGER BUIR_Museum 
    BEFORE INSERT OR UPDATE ON Museum
    FOR EACH ROW

BEGIN
    IF :NEW.EmployeeList IS NOT NULL THEN
        FOR i IN :NEW.EmployeeList.FIRST..:NEW.EmployeeList.LAST LOOP
            IF :NEW.EmployeeList(i).birthdate > SYSDATE THEN
                RAISE_APPLICATION_ERROR(-20029, 'Invalid birthday');
            END IF;
        END LOOP;
    END IF;
END;



  1. 30 tabeller med få rader - TRUNCATE det snabbaste sättet att tömma dem och återställa bifogade sekvenser?

  2. Välj fråga med tre där villkoren är långsamma, men samma fråga med valfri kombination av två av de tre där villkoren är snabba

  3. EXECUTE...INTO...USING-satsen i PL/pgSQL kan inte köras i en post?

  4. Uppdatering av en tabell i en select-sats