ORACLE觸發器:在insert之前,判斷這條插入語句是否可插入,不可插入時拋異常........
阿新 • • 發佈:2019-02-16
CREATE OR REPLACE TRIGGER "RQC_RECORD_TRI_INS"
BEFORE insert ON RQC_RECORD
FOR EACH ROW
DECLARE
NEW_TIME VARCHAR2(8);
START_TIME VARCHAR2(8);
END_TIME VARCHAR2(8);
INSERT_EXCE exception;
BEGIN
NEW_TIME := to_char(sysdate,'hh24:mi');
select starttime into START_TIME from rqc_worktime;
select endtime into END_TIME from rqc_worktime;
-- dbms_output.put_line(:new.recordtypeno);
-- 得到要插入行的recordtypeno是否為開關機,並且判斷當前時間是否為營業時間,如果條件都成立則不讓插入資料,丟擲異常
if ((:new.recordtypeno = '010' or :new.recordtypeno = '011') and (NEW_TIME >= START_TIME and NEW_TIME <= END_TIME))
then raise INSERT_EXCE;
end if;
-- exception when INSERT_EXCE then dbms_output.put_line('在營業時間內進行正常開關機');
exception when INSERT_EXCE then raise_application_error('-20002', '在營業時間內進行正常開關機');
BEFORE insert ON RQC_RECORD
FOR EACH ROW
DECLARE
NEW_TIME VARCHAR2(8);
START_TIME VARCHAR2(8);
END_TIME VARCHAR2(8);
INSERT_EXCE exception;
BEGIN
NEW_TIME := to_char(sysdate,'hh24:mi');
select starttime into START_TIME from rqc_worktime;
select endtime into END_TIME from rqc_worktime;
-- dbms_output.put_line(:new.recordtypeno);
-- 得到要插入行的recordtypeno是否為開關機,並且判斷當前時間是否為營業時間,如果條件都成立則不讓插入資料,丟擲異常
if ((:new.recordtypeno = '010' or :new.recordtypeno = '011') and (NEW_TIME >= START_TIME and NEW_TIME <= END_TIME))
then raise INSERT_EXCE;
end if;
-- exception when INSERT_EXCE then dbms_output.put_line('在營業時間內進行正常開關機');
exception when INSERT_EXCE then raise_application_error('-20002', '在營業時間內進行正常開關機');
END;
注::new可獲取插入的欄位值。
raise_application_error用來拋異常,阻止插入。
oracle中時間可以比較大小。
to_char(sysdate,'hh24:mi');可以獲取當前時間,後面的為格式。