Oracle過程及函數的參數模式

來源:互聯網
上載者:User
一、In、out、in out模式

在Oracle中過程與函數都可以有參數,參數的類型可以指定為in、out、in out三種模式。

三種參數的具體說明,如所示:

(1)in模式

in模式是引用傳遞。調用過程時實際參數將值以引用方式傳遞給預存程序的形式參數,形式參數在過程中是唯讀模式的,也就是說:只能通過形式參數讀取到實際參數的值。當過程執行完畢後,實際參數的值不會發生任何變化。

過程:

create or replace procedure MyProcedure(param1 in INTEGER)    --param1形式參數

AS

BEGIN

    ……..

END

調用:

num:=100;

MyProcedure(num);        --num 實際參數

分析:

實際參數num將其值100傳遞給過程的形式參數param1,param1的值變為100,過程執行完後返回到調用過程的語句,實際參數num的值不會發生任何變化。

(2)out模式

out模式是值傳遞。調用過程的時候,形式參數會忽略實際參數的值,而被初始化為null值,形式參數是可讀寫的,所以在過程中形式參數的值可以被修改,過程執行完畢後,形式參數會將其值賦值給實際參數。

過程

create or replace procedure MyProcedure(param1 out INTEGER)    --param1形式參數

AS

BEGIN

    DBMS_OUTPUT.PUT_LINE(param1);    --param1為null

    param1:=1;                --修改param1的值為1

END

調用:

num:=100;

MyProcedure(num);        --num 實際參數

分析:

實際參數並不能將其值傳給過程的形式參數,相反過程的形式參數的初始值為null,等過程執行完後param1的值變為1,過程返回時將形式參數的值賦值給實際參數,所以num的值從100變為了1;

(3)in out模式

in out模式是值傳遞的。調用過程的時候,實際參數的值會以值傳遞的方式賦值給形式參數,在過程中形式參數的值可以被修改,等過程執行完畢後,形式參數又會將其值賦值給實際參數。

過程:

create or replace procedure MyProcedure(param1 in out INTEGER)    --param1形式參數,能接受實際參數傳來的值

AS

BEGIN

    DBMS_OUTPUT.PUT_LINE(param1);    --param1為null

    param1:=1;

END

調用:

num:=100;

MyProcedure(num);        --num 實際參數

分析:

實際參數num將其值100傳遞給過程的形式參數param1,param1的值初始化為100,過程執行中param1的值變為1,等過程執行完畢返回時又將形式參數param1的值賦值給了實際參數num,所以num的值從100變為了1;

將字面值或常量當作實際參數,由於存在值的複製。所以與out或in out模式的形式參數相關聯的實際參數必須是一個變數,而不能是一個常量或運算式。必須有一個可以儲存傳回值的位置。

out模式和in out模式的主要區別就是:in out模式能將實際參數的值傳遞給過程的形式參數,out模式的形式參數的初始值只能為null。

二、傳值和傳引用

預設情況下,PL/SQL的in模式為傳值方式,ou、in out模式為傳引用方式。

引用傳遞的方式效率比較高,傳遞大型PL/SQL數組時表現尤為突出。

NOCOPY提示

·in模式總是以引用方式傳遞參數,所以不允許在in模式上使用NOCOPY提示;

·out、in out模式可以通過NOCOPY關鍵字來告訴PL/SQL編譯器採用引用方式來傳遞參數值;NOCOPY只是一個編譯器提示,而不是編譯指令,所以它並不是總是有效;

·以下幾種情況會忽略NOCOPY的存在,如所示:

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.