ORACLE:触发时间段

时间:2016-03-28 21:31:00

标签: sql oracle

我有两张桌子:

-CONTRACTS(经理,起始日期,结束日期,cat_num)

-TEAMS(经理日期,结束日期)

如果所有经理在出现在TEAMS上时在CONTRACTS中的cat_num介于4到9之间,我想检查一个触发器。

这是我的触发器:

CREATE TRIGGER T1
  BEFORE INSERT OR UPDATE OF manager on teams
  FOR EACH ROW
DECLARE
  nJP NUMBER;
  project_enddate DATE;
BEGIN
  SELECT sysdate INTO project_enddate FROM projects WHERE :NEW.end_date IS NULL;
  SELECT COUNT(*)
    INTO nJP
    FROM CONTRACTS c
    WHERE c.manager = :NEW.manager AND ((:NEW.start_date<c.start_date AND project_enddate>c.start_date) OR (:NEW.start_date>c.start_date)) AND c.cat_num BETWEEN 4 AND 9;
  IF nJP = 0 THEN
    RAISE_APPLICATION_ERROR(-20000,'Error: INVALID CAT_NUM');
  END IF;
END T1;
/

我检查合同中的所有行,我的插入日期包含哪个时间段。

我使用 project_enddate ,因为项目中的end_date可能为NULL,我将值更改为sysdate(可能在这里可能是错误)(刚好在begin的下方)。

当我插入正确的行时,我的触发器在执行期间显示错误,我不知道为什么。这是一个例子:

TABLE CONTRACTS
MANAGER         START_DA END_DATE    CAT_NUM
--------------- -------- -------- ----------
12345           01/10/96 30/09/99          9
12345           01/10/99 30/09/01          8
12345           01/10/01 14/10/04          7
12345           01/02/11 31/01/14          6
12345           01/02/14                   6

当我插入团队价值(&#39; 12345&#39;,to_date(&#39; 05/02 / 15&#39;,&#39; DD-MM-YY&#39;)时,to_date( &#39; 29/03/16 39#;,&#39; DD-MM-YY&#39;))

出现我的触发器的执行错误:

ERROR at line 1:
ORA-01403: no data found
ORA-06512: at "SYSTEM.DISP_CAT_SUP", line 5
ORA-04088: error during execution of trigger 'SYSTEM.DISP_CAT_SUP'

0 个答案:

没有答案