忽略SQL触发器语句

忽略SQL触发器语句,sql,oracle,triggers,Sql,Oracle,Triggers,它应该确保您只能设置预定义的值,否则会显示错误。我犯了一个错误 第6行错误:PL/SQL:语句被忽略 4.每行 5.声明 6.v_stru VARCHAR2(50) 试着这样做: 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_

它应该确保您只能设置预定义的值,否则会显示错误。我犯了一个错误

第6行错误:PL/SQL:语句被忽略
4.每行
5.声明
6.v_stru VARCHAR2(50)

试着这样做:

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是表中的一列,radnici,或者代表什么? 但老实说,我不明白你的逻辑。在变量中指定列的值,然后在列中指定该变量的值。为什么?此外,请确保STRUCNA_SPREMA是一个varchar

亲切问候,,
Stefan

您在哪个客户机中看到该错误?看起来像,但可能是另一个客户。。。此外,不直接相关,但是
v_ss
等级
应该来自哪里?STRUCNA_SPREMA的
意味着触发器仅在该列更新时触发,因此(即使逻辑没有多大意义)。这并不能解释或避免OP获取的错误。逻辑是:我有strucna_sprema的预定义值,它需要检查是预定义值之一,如果是,则设置该列,如果不发送和错误
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;