日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Oracle存储过程小解

發布時間:2025/3/14 编程问答 14 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Oracle存储过程小解 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
Oracle存儲過程小解 1.創建語法create or replace procedure pro_name(paramIn in type, paramOUt out type,paramInOut in out type)as(is)[類似于mysql的declare]beginstatement...end;注:<1>入參不用寫長度,只需寫類型,in、out、in out寫在參數名后,區別于mysql寫在參數名前,不寫默認為in;<2>in是值傳遞,out和in out是引用傳遞,in的值不可修改,out的值在進入存儲過程是初始化null。<3>as(is)類似于mysql的declare,也可以在begin后使用declare定義變量;設置變量值,也不用set,直接name := value或者使用select...into...;<4>沒有類似于mysql中的變換分隔符,最后end;即可。<5>沒有入參時,可不要pro_name后();
    <6>變量聲明:在begin之前,直接varName type;在內部,declare varName type.變量賦值需要使用 := 符號
2.常用方法<1> if...then...elseif...then...end if;<2>多種循環:a.loop...exit when... end loop;b.while...loop....end loop;c.for...in...loop...end loop;(強烈推薦,mysql沒有for循環)
     d.
exit可用于跳出循環,return結束存儲過程
     e.<<loopName>>...goto loopName:類似于標記; <3>游標cursor:游標屬性:cursor%found; --有數據cursor%notfound; --無數據cursor%isopen; --游標已開啟cursor%rowcount; --受最后SQL語句影響的行數 3.異常處理<1>.通過關鍵字exception捕獲異常語法:exceptionwhen exception_decription thenstatemntwhen exception_description2 thenstatementwhen others thenstatement<2>.最常用的異常:no_data_found:select into語句沒有數據;too_many_rows:select into有多條數據;dup_val_on_index:唯一索引列重復;storage_error:內存溢出;zero_devide:除數為0;case_not_found:case沒有匹配的條件且沒有else;cursor_already_open:游標已打開;timeout_on_resource:請求資源超時。<3>.自定義異常:(類似于mysql的自定義condition,避免error_code值帶來的閱讀性太差的問題);progma exception_init(selfexception,-oracle_error_code);示例:declare demo_exception exception;progma exception_init(demo_exception,-60);<4>.處理異常a.不拋出,statement處理;b.拋出異常:●存儲過程自動拋出●通過raise關鍵字拋出,如 raise no_data_found;●通過raise_application_error(error_number,message[flag(true,false)]);error_number數值范圍從-20999到-20000;messgae表示異常描述;flag表示是添加到(true)或者覆蓋(false)錯誤堆,默認是false;如:raise_application_error(-20001,'invalid id number');<5>異常處理機制與java異常處理機制相似。 4.常用技巧:<1>execute immediate statement to param;關鍵字:execute immediate...to...;它解析并馬上執行動態的SQL語句或非運行時創建的PL/SQL塊,可以理解為執行動態SQL。注意幾點:a.不支持返回多行的操作,這種情況應該用refcursor來處理b.執行sql時不要加分好,pl/sql塊時加分號;c.使用之前應該將之前的事務顯示提交。示例:execute immediate 'select dname, loc from dept where deptno = :1'into l_nam, l_locusing l_dept ;<2>sys_refscursor:非正常游標,用于返回結果集示例:create or replace procedure up_test(o out sys_refcursor) is --可以在代碼中獲取返回值beginopen o for select * from lq_test;end;<3>%type作用:與關聯表的關聯字段類型長度綁定起來,跟隨綁定表字段的變化,是一種非常好的變成習慣,避免多次更改:示例:declare v_name students.name%type;<4>%rowtype表示該列為行數據類型,存儲的為一行數據,相當于一條record相對于查詢結果或者游標。作用:當查詢一行數據時,比多個字段采用%type效率要高一些。示例:declare v_emp emp%rowtype;cursor cursor_name is select...from table...open cursor_namefor xxx in cursor_name loopv_emp := xxx;end loop;end cursor_name;

?

轉載于:https://www.cnblogs.com/angry-scholar/p/7119501.html

與50位技術專家面對面20年技術見證,附贈技術全景圖

總結

以上是生活随笔為你收集整理的Oracle存储过程小解的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。