PL/SQL中對out,in out參數(shù)使用的?默認形參會復制一份實參的副本,然后在內(nèi)部傳遞,修改等,發(fā)生異常,不會賦值給實參,控制權(quán)交還調(diào)用環(huán)境,而實參值不變,還是調(diào)用前的值。而使用了NOCOPY后,形參將獲得一個指向?qū)崊⒌闹羔槪缓笤趦?nèi)部傳遞,賦值都直接修改實參了,此時如果異常發(fā)生,控制權(quán)交還調(diào)用環(huán)境,但是實參已經(jīng)被修改了。無法還原成調(diào)用前的值。
對參數(shù)I N使用NOCOPY將會產(chǎn)生編譯錯誤,這是因為參數(shù)I N總是按引用傳遞.
NOCOPY的主要優(yōu)點是可以提高程序的效率。當我們傳遞大型PL/SQL表時,其優(yōu)越性特別顯著.使用NOCOPY的限制在某些情況下,NOCOPY將被編譯器忽略,這時的參數(shù)仍將按值傳遞。這時,編譯器不會報告編譯錯誤。由于NOCOPY是一個提示項(Hint),編譯器可以決定是否執(zhí)行該項。在下列情況下,編譯器將忽略NOCOPY項:
1.實參是索引表(index-by table)的成員時。如果該實參是全表,則該限制不起作用。
2.實參被強制指定精度,比例或NOT NULL時。該限制將不適用按最大長度強制的字符串參數(shù)。
3.實參和形參都是記錄類型,二者是以隱含方式或使用了%ROWTYPE類型聲明時,作用在對應(yīng)字段的強制說明不一致。
4.傳遞實參需要隱式類型轉(zhuǎn)換時。
5.子程序涉及到遠程過程調(diào)用(PRC)。遠程過程調(diào)用就是跨越數(shù)據(jù)庫對遠程服務(wù)器的過程調(diào)用。
對參數(shù)I N使用NOCOPY將會產(chǎn)生編譯錯誤,這是因為參數(shù)I N總是按引用傳遞.
NOCOPY的主要優(yōu)點是可以提高程序的效率。當我們傳遞大型PL/SQL表時,其優(yōu)越性特別顯著.使用NOCOPY的限制在某些情況下,NOCOPY將被編譯器忽略,這時的參數(shù)仍將按值傳遞。這時,編譯器不會報告編譯錯誤。由于NOCOPY是一個提示項(Hint),編譯器可以決定是否執(zhí)行該項。在下列情況下,編譯器將忽略NOCOPY項:
1.實參是索引表(index-by table)的成員時。如果該實參是全表,則該限制不起作用。
2.實參被強制指定精度,比例或NOT NULL時。該限制將不適用按最大長度強制的字符串參數(shù)。
3.實參和形參都是記錄類型,二者是以隱含方式或使用了%ROWTYPE類型聲明時,作用在對應(yīng)字段的強制說明不一致。
4.傳遞實參需要隱式類型轉(zhuǎn)換時。
5.子程序涉及到遠程過程調(diào)用(PRC)。遠程過程調(diào)用就是跨越數(shù)據(jù)庫對遠程服務(wù)器的過程調(diào)用。