触发检查与不是类似的语句

时间:2013-12-02 01:26:28

标签: sql oracle triggers

尝试创建一个不会让我插入表格的触发器,除非员工是员工或经理。下面的代码编译,但是当我尝试通过插入一些值来测试它时,我没有得到所需的输出,每当我尝试插入任何东西时都会弹出错误。当我不喜欢'经理'或不喜欢'工作人员'而不是两者合并时,触发器工作正常。任何建议或看到代码有什么问题?谢谢。

  CREATE OR REPLACE TRIGGER emp_check BEFORE
      INSERT ON handles FOR EACH row DECLARE empclass VARCHAR(10);
      BEGIN
        SELECT e.class INTO empclass FROM employee e WHERE e.empno = :new.empno;
        IF empclass NOT LIKE 'Manager' or 'Staff' THEN
          raise_application_error(-20003, ('Only a Staff Member or Manager Can Handle Orders'));
        END IF;
      END;

1 个答案:

答案 0 :(得分:3)

首先,您发布的代码无法编译。这条线

IF empclass NOT LIKE 'Manager' or 'Staff' THEN

将被解释为

IF (empclass NOT LIKE 'Manager') or ('Staff') THEN

会生成PLS-00382:表达式的类型错误,因为Staff不是一个计算结果为布尔值的表达式。

其次,您似乎无需在此代码中使用LIKE运算符。你没有使用外卡或表达式,你只是在测试平等或不平等。对这类事情使用相等运算符。如果要与带外卡的表达式进行比较,可以使用LIKE

第三,你可能想在这里使用NOT IN

IF empclass NOT IN ('Manager', 'Staff') THEN