2017-06-19 80 views
0

我正在編寫一個簡單的PL/SQL觸發器來檢查插入或更新的值是否爲UPPER,觸發器編譯正常,但在插入或更新記錄時不起作用。你有什麼主意嗎?謝謝爲什麼我的PLSQL觸發器驗證不會失敗?

CREATE OR REPLACE TRIGGER check_case_trg 
BEFORE 
INSERT OR UPDATE 
ON unidades_medidas 
FOR EACH ROW 
DECLARE 
    e_invalid_case EXCEPTION; 
BEGIN 
    IF 
     :NEW.unm_codigo <> UPPER(:NEW.unm_codigo) OR 
     :NEW.unm_descripcion <> UPPER(:NEW.unm_descripcion) 
     THEN 
      RAISE e_invalid_case; 
    END IF; 
EXCEPTION 
    WHEN e_invalid_case THEN 
     DBMS_OUTPUT.PUT_LINE(
      'Nuevos datos deben estar en mayúsculas'); 
END check_case_trg; 
/
SHOW ERRORS; 
+2

順便提一下,這可能會更好地實現爲檢查約束。 –

回答

3

DBMS_OUTPUT是一個調試工具 - 它不會引發錯誤或異常。

爲確保您的觸發器停止插入或更新,您必須確保引發異常。要做到這一點的一個好方法是使用RAISE_APPLICATION_ERROR,因爲它讓你在被報告給調用進程,例如:

CREATE OR REPLACE TRIGGER check_case_trg 
BEFORE 
INSERT OR UPDATE 
ON unidades_medidas 
FOR EACH ROW 
BEGIN 
    IF 
     :NEW.unm_codigo <> UPPER(:NEW.unm_codigo) OR 
     :NEW.unm_descripcion <> UPPER(:NEW.unm_descripcion) 
     THEN 
      RAISE_APPLICATION_ERROR(-20000, 'Nuevos datos deben estar en mayúsculas'); 
    END IF; 
END check_case_trg; 

附:什麼異常控制我必須得到第二次世界大戰的評論,認爲這應該最有可能作爲桌上的檢查約束來實施。

+0

傑弗裏你是PLSQL怪物!觸發器工作正常,現在我明白你的指示。我知道我可以添加一個約束來檢查大小寫,但練習的第一步是創建一個觸發器來檢查大小寫。謝謝你的幫助。當然,我投你的答案。再次感謝! –