Oracle 存儲過程學習筆記


1、存儲過程簡單實例

CREATE OR REPLACE PROCEDURE  存儲過程名稱 (參數in,參數out)
AS
-- 變量聲明,每個聲明用分號結束。可以在聲明的同時初始化 
name varchar2(50);
age number(8) default 0;

--開始邏輯運算
BEGIN

--業務邏輯

END

2、游標實現方式、

--顯式實現方式(可以實現多值)

cursor cursorVar is select event_id, isagain, rate from call_event where sender = v_sender;   -- 聲明游標,select語句可以包括單引號等。
  
begin  
    open cursorVar;    -- 打開游標  
    loop  
         fetch cursorVar into v_event_id, v_isagain, v_rate;       -- 取值  
         exit when cursorVar%notfound;                             --當沒有記錄時退出循環  
         dbms_output.put_line(v_event_id || ', ' || v_isagain || ', ' || v_rate);  
    end loop;  
     
    close cursorVar;   -- 關閉游標  
     
    --游標的屬性有:%FOUND,%NOTFOUNRD,%ISOPEN,%ROWCOUNT;   
    --%FOUND:已檢索到記錄時,返回true   
    --%NOTFOUNRD:檢索不到記錄時,返回true   
    --%ISOPEN:游標已打開時返回true   
    --%ROWCOUNT:代表檢索的記錄數,從1開始   
end;  

--隱式游標(可以實現查詢多值)

for currow in (  
   select t.col1, t.col2  
   from tableName t  
   where ...  
) loop  
    if currow.col1 = 0 then  
       return;    -- 中止sp,返回  
   end if;  
end loop; 

--帶參數的游標(可以實現查詢多值)

declare  
isok integer;  
v_event_id number(10);  
v_isagain number(2);  
v_rate number(2);  
  
v_sender char(11) := '13800138000';  
  
cursor cursorVar(p_sender varchar2) is select event_id, isagain, rate from call_event where sender = p_sender; -- 聲明游標  
  
begin  
    open cursorVar(v_sender);    -- 打開游標,在括號里傳參。  
    loop  
         fetch cursorVar into v_event_id, v_isagain, v_rate;       -- 取值  
         exit when cursorVar%notfound;                             --當沒有記錄時退出循環  
         dbms_output.put_line(v_event_id || ', ' || v_isagain || ', ' || v_rate);  
    end loop;  
     
    close cursorVar;   -- 關閉游標  
end;  

3、異常處理

EXCEPTION 
   WHEN OTHERS THEN 
      vs_msg := 'ERROR IN xxxxxxxxxxx_p('||is_ym||'):'||SUBSTR(SQLERRM,1,500);
 
   ROLLBACK; 

   --把當前錯誤記錄進日志表。 
   INSERT INTO LOG_INFO(proc_name,error_info,op_date) 
   VALUES('xxxxxxxxxxx_p',vs_msg,SYSDATE); 
   COMMIT; 
   RETURN; 

 

參考oracle存儲過程基礎語法+提升+例子總結

       Oracle存儲過程基本語法與基礎教程 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM