在SQL中显示列(和计数)的不同数据

时间:2014-05-06 11:18:44

标签: sql oracle plsql triggers

我遇到了一个我想要创建的触发器的问题。如果D_EMP_ID条目(对于每个个人ID)超过9,我希望触发器显示错误消息。换句话说,ID为' 1000'最多只能有9个条目。如果为' 1000'添加了第十个条目它应该显示错误。

但目前它并没有显示错误。每当我添加一个新条目时,它都会被添加。即使它是第十,十一,十二等。

以下是触发器的代码:

CREATE OR REPLACE TRIGGER tri_order_line_count
  BEFORE INSERT OR UPDATE ON pl_work_allocation FOR EACH ROW
DECLARE
  order_count INTEGER;
BEGIN
  SELECT COUNT(*) INTO order_count
   FROM pl_work_allocation WHERE d_emp_id = :new.d_emp_id;

  IF (order_count > 9) THEN
    raise_application_error(-20001, 'Too many roles for ' || :new.d_emp_id || '');
  END IF;
END;

以下是PL_WORK_ALLOCATION表的布局:

S_REPORTED_CRIME_ID- D_EMP_ID-  WORK_DESC-  LEAD_POLICE_OFFICER-    WORK_START_DATE-   WORK_END_DATE-
12                   1000         example       1001                 08/26/2011         09/27/2012
15                   1010          test         1001                 08/26/2011         09/27/2012
1                    1000       Investigation   1003                 08/26/2011         08/26/2012

1 个答案:

答案 0 :(得分:-1)

我认为你应该在提出错误后添加回滚

if (order_count > 9)            
             then raise_application_error(-20001,
         'Too many roles for '|| :new.D_EMP_ID ||'' );
         ROLLBACK;
end if;