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');可以獲取當前時間,後面的爲格式。



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章