2017-05-27 80 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的预定义值,它需要检查的是预定义的值之一,如果是的话,设置该列,如果不发送和错误 –