2017-05-27 107 views
0

它應確保您只能設置預定義的值,否則會顯示錯誤。我得到錯誤忽略SQL觸發器語句

錯誤在管線6:PL/SQL:語句忽略
4. FOR EACH ROW
5. DECLARE
6. v_stru VARCHAR2(50);

CREATE OR REPLACE TRIGGER radnici_strucna_sprema 
BEFORE INSERT OR UPDATE OF STRUCNA_SPREMA ON radnici 
FOR EACH ROW 
DECLARE 
    v_stru VARCHAR2(50); 
BEGIN 
    v_stru := :NEW.strucna_sprema; 
    IF v_ss = 'osnovno' THEN 
    :NEW.strucna_sprema := v_stru; 
    ELSIF v_ss = 'srednje' THEN 
    :NEW.strucna_sprema := v_stru; 
    ELSIF v_ss = 'vise' THEN 
    :NEW.strucna_sprema := v_stru; 
    ELSIF grade = 'visoko' THEN 
    :NEW.strucna_sprema := v_stru; 
    ELSE 
    RAISE_APPLICATION_ERROR(NUM => -20002, 
      MSG => 'Forma strucne spreme nije odgovarajuca!'); 
    END IF; 
END; 
+3

你在哪個客戶端看到錯誤?它看起來像[你的客戶端這種問題不正確處理PL/SQL](https://stackoverflow.com/a/37684613/266304),但也許是一個不同的客戶端...此外,不直接相關,但在哪裏'v_ss'和'grade'應該是從哪裏來的? –

回答

0

嘗試這樣的:

CREATE OR REPLACE TRIGGER radnici_strucna_sprema 
BEFORE INSERT OR UPDATE ON radnici 
FOR EACH ROW 
DECLARE 
    v_stru VARCHAR2(50); 
BEGIN 
    v_stru := :NEW.strucna_sprema; 
    IF v_ss = 'osnovno' THEN 
    :NEW.strucna_sprema := v_stru; 
    ELSIF v_ss = 'srednje' THEN 
    :NEW.strucna_sprema := v_stru; 
    ELSIF v_ss = 'vise' THEN 
    :NEW.strucna_sprema := v_stru; 
    ELSIF grade = 'visoko' THEN 
    :NEW.strucna_sprema := v_stru; 
    ELSE 
    RAISE_APPLICATION_ERROR(NUM => -20002, 
      MSG => 'Forma strucne spreme nije odgovarajuca!'); 
    END IF; 
END; 

問題是

STRUCNA_SPREMA的。

這個變量,STRUCNA_SPREMA,是列在表中,Radnicí酒店,或什麼是代表?但說實話,我不明白你的邏輯。您將該列的值分配給一個變量,然後在該列中分配該變量的值。爲什麼?!而且,確保STRUCNA_SPREMA是一個varchar。

親切的問候, 斯特凡

+0

'STRUCNA_SPREMA'表示觸發器僅在該列被更新時才觸發,所以[這是有效的](https://docs.oracle.com/database/121/LNPLS/create_trigger.htm#BABGDFBI)(即使邏輯沒有多大意義)。這並不能解釋或避免OP正在進行的錯誤。 –

+0

邏輯是:我有strucna_sprema的預定義值,它需要檢查的是預定義的值之一,如果是的話,設置該列,如果不發送和錯誤 –