程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> Oracle數據庫 >> Oracle數據庫基礎 >> 對一個簡單的Oracle觸發器總結

對一個簡單的Oracle觸發器總結

編輯:Oracle數據庫基礎

1、 Oracle觸發器中如何定義變量、對變量賦值

declare     msg varchar2(22);    sourceUser varchar2(18):=’’;       sourceUserTpCount number;    ifExit number:=0;   2、 Oracle觸發器中如何獲取觸發當前動作的數據        msg:=:NEW.msg;        sourceUser:=:NEW.sourceUser;         NEW是系統關鍵字,跟在後面的是表字段   3、 If-else結構 if LENGTH(msg)>3 and LOWER(SUBSTR(msg,1,1))='8' then         … … Else         … … End if;   4、 與MSSQL對應的一些常用函數(只總結了我這次遇到的) 截取字符串 MSSQL:SUBSTRING(“字符串”,1,3)    Oracle:SUBSTR(“字符串”,1,3) 時間格式字符串轉換成日期類型 MSSQL:convert(datetime,’ 2009-12-26’)      Oracle: to_date('2009-12-26','yyyy-MM-dd')        日期類型轉換成時間格式字符串 MSSQL: convert(varchar(120),getdate(),120) Oracle: to_char(sysdate,'YYYYMMDD')     5、 常用日期操作 比較同一天 MSSQL:datediff(dd,’’,’’)=0(還有其他多種辦法) ORACL: TO_CHAR(gentime,'YYYYMMDD')= TO_CHAR(sysdate,'YYYYMMDD') DateTime類型與時間格式的字符串進行時間比較 MSSQL:getdate()>’2009-12-1’ Oracle: sysdate<to_date('2009-12-26','yyyy-MM-dd')   6、 Oracle中的標識列 MSSQL中的標識列在建表的時候設置int類型字段屬性就可以了。Oracle中的標識列需要先建立個SEQ,然後為表建立觸發器,當數據插入時獲取新的標識ID保存,通過“SEQ名.nextval”獲取新的標識ID。   7、 獲取系統時間 MSSQL:getdate() Oracle:sysdate   8、 打印信息 MSSQL:PRINGT ‘輸出信息’        Oracle: dbms_output.put_line(‘輸出信息’);nt   9、 其他 如何將查詢的單一結果賦值給變量 MSSQL:select 變量=count(*) from table ORALCE:Select count(*) into 變量 from table   一條語句後是否需要加分號 MSSQL:不需要 ORALCE:每一句結束後需要加分號   字符串相加 MSSQL: returnMsg:='感謝您對'+xsBH+'號候選人的支持!'; Oracle: returnMsg:='感謝您對'||xsBH||'號候選人的支持!';   Oracle觸發器案例代碼:

 

代碼 create or replace trigger t_table_triger
  after insert on t_table 
  for each row
declare 
   msg varchar2(22);
   returnMsg varchar2(180);
   xsBH varchar2(10);
   sourceUserTpCount number:=0;
begin 
   if inserting then  --inserting表示插入操作,每種操作類型都有對應的關鍵字
      msg:=:NEW.msg; --獲取觸發事件插入的數據值
      
      msg:=Replace(msg,'+','');--變量賦值
      msg:=Replace(msg,'-','');--替換,跟MSSQL裡函數相同
 
      if LOWER(SUBSTR(msg,1,1))='v' and LENGTH(msg)>3 then  
          if  sysdate<to_date('2009-12-26','yyyy-MM-dd') then --時間比較,sysdate是當前時間                                           
             select  count(*) into sourceUserTpCount from t_siteuser where userid=sourceUser and TO_CHAR(gentime,'YYYYMMDD')= TO_CHAR(sysdate,'YYYYMMDD'); 
             if sourceUserTpCount<=20 then  
                dbms_output.put_line(xsBH);--打印信息
                     insert into t_siteuser(id,bh,gentime) values (SEQ_t_siteuser.nextval,xsBH,sysdate);--SEQ_t_siteuser.nextval獲取標識ID
                     returnMsg:='感謝您對'||xsBH||'號的支持!';--字符串與變量結合             
             else
                returnMsg:='對不起,網站每天限投20票!';
             end if;  
          else
                returnMsg:='活動已結束,歡迎您繼續關注!';
          end if ;  
      end if;     
    end if;  
end;
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved