oracle 自定義存儲過程

 定義:存儲過程(Stored Procedure )是一組爲了完成特定功能的SQL 語句集,經編譯後存儲在數據庫中。用戶通過指定存儲過程的名字並給出參數(如果該存儲過程帶有參數)來執行它。
 存儲過程的優點:
 1.存儲過程只在創造時進行編譯,以後每次執行存儲過程都不需再重新編譯,而一般SQL語句每執行一次就編譯一次,所以使用存儲過程可提高數據庫執行速度。
2.當對數據庫進行復雜操作時(如對多個表進行Update、Insert、Query、Delete時),可將此複雜操作用存儲過程封裝起來與數據庫提供的事務處理結合一起使用。
3.存儲過程可以重複使用,可減少數據庫開發人員的工作量。
4.安全性高,可設定只有某用戶才具有對指定存儲過程的使用權。
存儲過程常用到的一些寫法:
create or replace procedure   名稱(記得必須是大寫)(

                                                                  v_frcode   varchar2,          --參數1

                                                                  out_cur     out sys_refcursor  --參數2遊標 用於返回多個值

                                                                  )is

     t_count int:=0;                 --int類型

     t_pbid varchar(100);      --字符串類型

     t_degree varchar(100);  --字符串類型

     t_money number;            --金額

     t_date  date;                     --日期類型

  

   begin

  //===========================for 循環操作=======================

for comdata in(

                              select  ziduan1,zuduan2,ziduan3,ziduan4 from table1 where 條件

                              )  loop

      //可以操作每一條數據 ,可以直接獲取到每一個字段 comdata.ziduan1

     //可在for 循環中操作

     if comdata.ziduan1=1 then

       t_count:=t_count+1;

     else

     

     end if;

end loop;

 //===============返回遊標,參數裏面定義遊標,用於頁面上展現數據==============

open out_cur for

      select * from table1 where 1=1;


//==============用遊標當作中間臨時表來進行其他操作=====================


   cursor cusname(名稱) is 

         select  b.orgid,b.orgdegree   from base_org_info b  where b.status='0'

    open cusname;

        loop

              fetch  cusnmae   into    t_pbid,t_degree;

             exit when cusname%notfound;

               update base_org_info set orgdegree='1'  where  

        end loop;


//=================輸出某些數據 或者拼接sql 的時候,輸出出來,方便查看結果==============

     DBMS_OUTPUT.PUT_LINE('總條數:'||t_total); 
     DBMS_OUTPUT.PUT_LINE('新增pb00_01的條數:'||t_inserttotal); 
     DBMS_OUTPUT.PUT_LINE('更新pb00_01的條數:'||t_updatetotal); 
     DBMS_OUTPUT.PUT_LINE('更新pb02_01的條數:'||t_updatetotal2); 


//====================返回給服務器端,用於頁面接收後拋出異常==============

   if t_dbbcbxbc_LJ = 0

      then

     Raise_application_error(-20020, '該患者未補償大病補充保險,不允許結算!!!');

    end if;  


//=====================================

end;

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