我有一个触发器,它应该测试是否有人在最后5分钟内冲出时间卡。如果他们没有将他们的信息留给表clk_data,否则应该在日志表utl_logbook中创建一条记录,并且应该中止对clk_data的插入。oracle触发日志
当我运行一个良好的拳头插入作品广告。当它是一个糟糕的冲我得到以下错误(5分钟的最后一拳之内):
SQL Error: ORA-20101: Too Soon
ORA-06512: at "TRUTRACK.INSERT_CLK_DATA", line 14
ORA-04088: error during execution of trigger 'TRUTRACK.INSERT_CLK_DATA'
停止交易,但我没有得到任何它记录在utl_logbook。
The trigger code:
create or replace
TRIGGER "INSERT_CLK_DATA"
BEFORE INSERT ON clk_data
FOR EACH row
BEGIN
DECLARE qty INTEGER := 0;
BEGIN
SELECT COUNT(*)
INTO qty
FROM clk_data
WHERE clk_time BETWEEN (:new.clk_time - 5/(24*60)) AND (:new.clk_time + 5/(24*60))
AND :new.payroll = clk_data.payroll;
IF qty > 0 THEN
INSERT INTO utl_logbook (time, source, message) VALUES (sysdate, 'INSERT_CLK_DATA', 'Clock punch within restricted window. Payroll ID:' || :new.payroll || ' Time: ' || :new.clk_time || ' Type: ' || :new.type);
RAISE_APPLICATION_ERROR(-20101, 'Too Soon');
END IF;
END;
END;
谢谢。这工作很好。 – user1732495