PL/SQL NOCOPY限制模式
生活随笔
收集整理的這篇文章主要介紹了
PL/SQL NOCOPY限制模式
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
NOCOPY模式用于限定OUT模式和IN OUT模式在調用時是不是以傳引用的方式進行。
默認情況下,OUT模式和IN OUT模式的參數是以傳值的方式進行調用的。
IN模式總是以傳引用的方式,如果用NOCOPY限制會報錯。傳值就是將實參的值復制到形參。(因為復制,速度會沒有傳引用快)
傳引用就意味著將實參的值的一個指針傳遞到相應的參數,形參改變實參也會立即被改變。(這些在C指針中講的比較好) --NOCOPY限制的OUT模式
create or replace procedure RaiseErrorCopy(p_Raise in boolean,p_ParameterA out nocopy number --將傳值用NOCOPY限制為傳引用)as
beginp_ParameterA:=7;if p_Raise thenraise dup_val_on_index;elsereturn;end if;
end RaiseErrorCopy;--測試效果
v_num:=1;
beginDBMS_OUTPUT.PUT_LINE('Value before first call: '||v_num);RaiseErrorCopy(FALSE,v_num); DBMS_OUTPUT.PUT_LINE('Value after sucessful call: '||v_num);DBMS_OUTPUT.PUT_LINE('');v_num:=2;DBMS_OUTPUT.PUT_LINE('Value before second call: '||v_num);RaiseErrorCopy(True,v_num);exceptionwhen others thenDBMS_OUTPUT.PUT_LINE('Value after unsucessful call: '||v_num);
end;Value before first call: 1
Value after sucessful call: 7 Value before second call:2
Value after unsucessful call:7 --即使沒有完全成功,但是實參值也因形參改變而立即改變了 如果沒有NOCOPY限制。結果將會是: Value before first call: 1
Value after sucessful call: 7 Value before second call:2
Value after unsucessful call:2 --只有當程序正常結束時,賦給OUT或者IN OUT類型參數的值才會返回
NOCOPY的主要優點是它可以提高程序性能。傳遞大型數組的時候,這一點尤為突出當我們聲明一個參數是IN類型時,進行傳參是將傳給該參數一個實參的指針;
當我們聲明一個參數是OUT或者IN OUT類型時,進行傳參是將傳給該參數一個實參的拷貝;
只有當程序正常結束時,賦給OUT或者IN OUT類型參數的值才會返回(除非使用了NOCOPY)。
將NOCOPY應用在傳遞數據量很大的參數(such as collections, records, and instances of object types)時,可起到優化性能的作用。
當參數是OUT或者IN OUT類型時:沒有NOCOPY=按值傳遞(ByVal);加上NOCOPY=按引用傳遞(ByRef)http://blog.csdn.net/kkdelta/article/details/4698399
http://www.cnblogs.com/qianwen/p/3769665.html
PL/SQL Programming Scott Urman
?
轉載于:https://www.cnblogs.com/qianwen/p/3769815.html
總結
以上是生活随笔為你收集整理的PL/SQL NOCOPY限制模式的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: c#问题(按F1或F2键时触发事件)
- 下一篇: iOS 开发之 - iOS6适配 -