我有两张桌子:
-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'