一、定義參數
在模塊頭部定義參數
如:procedure proc_name(para_name in datatype [{:=value | default value}] [, ...])
1、para_name爲參數名
2、in 爲參數模式,參數模式有in,out,in out
3、datatype爲數據類型,該數據類型不受約束,也即只有數據類型的名稱,不能有數據長度,如:varchar2。
4、:=value 爲參數的默認值,也可以使用default value定義默認值。
二、形參和實參
形參爲在模塊頭部的參數列表中聲明的參數的名稱。
實參爲在調用模塊時放置在參數列表中的真實值或者表達式。
形參只能存在於模塊中,可以把形參看做佔位符,在執行模塊時,實參將替換形參。
形參和對應的實參的數據類型必須能夠兼容。
三、參數模式
1、in
只能通過in模式的參數向模塊傳入數據,但不能通過in模式的參數傳出數據。
模塊可以讀取in模式參數的值,不能修改參數的值。
in模式爲默認的參數模式,如果不寫即爲in模式參數。
可以使用:=或者default爲in模式參數定義初始值。
in模式參數對應的實參可以使變量,常量,直接值,或者表達式。
2、out
out模式爲只寫,可以通過out模式參數,模塊向調用程序傳出數據,模塊可以修改out模式參數的數值,但不能讀取參數的值。
out模式參數在模式成功結束之前,沒有任何值(除非使用nocopy提示),在模塊的執行過程中,針對out模式參數所做的任何賦值,實際上都是在對一個副本進行操作。在模
塊成功執行之後,這個副本的值纔會真正傳遞給out模式參數。
規則:不能把out模式參數的值賦值給其他變量
不能爲out模式參數提供初始值
如果模塊執行異常,任何對out模式參數的賦值操作都會被回滾。(可以在異常處理中爲參數賦值)
對應於out模式參數的實參只能是變量。
3、in out
in out模式的參數是可讀可寫的。
通過in out模式的參數,可以爲模塊傳入數據,也可以爲調用程序傳出數據。
規則:不能爲in out模式的參數設置初始值
與in out模式參數對應的實參只能是變量
四、實參與形參的映射的方法
1、位置表示法
在調用模塊時,根據參數的位置進行關聯。也即第n個實參對應第n形參。
2、命名錶示法
使用‘=>'連接符顯示地把實參和形參建立關聯。
使用命名錶示法可以不按照形參的順序
當有默認值的形參處於沒有默認值的形參之間,且又想不寫該參數的實參,使用其默認值時,要使用命名錶示法
3、混合法
既包含位置表示法,又有命名錶示法
命名錶示法,可以不按照形參的順序,但使用位置表示法的實參必須與形參的位置相對應。
五、初始值
可以爲in模式的參數定義初始值,不能爲out和in out模式的參數定義初始值。
使用':='或者default爲參數定義初始值
在調用模塊時,如果沒有有初始值的參數提供實參,則該參數使用默認值。