1. 程式人生 > >ORACLE觸發器:在insert之前,判斷這條插入語句是否可插入,不可插入時拋異常........

ORACLE觸發器:在insert之前,判斷這條插入語句是否可插入,不可插入時拋異常........

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', '在營業時間內進行正常開關機');
    

END;

注::new可獲取插入的欄位值。

       raise_application_error用來拋異常,阻止插入。

       oracle中時間可以比較大小。

      to_char(sysdate,'hh24:mi');可以獲取當前時間,後面的為格式。