Oracle 子程序參數(shù)模式,IN,OUT,NOCOPY
IN主要用于傳入?yún)?shù),可以是變量,常量,表達(dá)式,在子程序內(nèi)部不能改變其值.
DECLARE
n NUMBER := 10;
PROCEDURE do_something (
n1 IN NUMBER) IS
BEGIN
dbms_output.put_line(n1); -- prints 10
--n1:=20; --illegal assignment.
END;
BEGIN
do_something(n);
do_something(20);
END;
OUT模式用于返回值,必須傳入變量調(diào)用,變量的初始的值不會(huì)傳給形式參數(shù),如<<1>>所示.
形參的值在子程序返回時(shí)(不是在形式參數(shù)改變時(shí))才copy給實(shí)參, ,如<<2>>所示,如果在 返回之前發(fā)生異常,實(shí)際參數(shù)的值不會(huì)被改變.
DECLARE
n NUMBER := 10;
PROCEDURE do_something (
n1 OUT NUMBER) IS
BEGIN
dbms_output.put_line('before assign: ' || n1); -- prints none <<1>>
n1:=20;
dbms_output.put_line('before return: ' || n); -- prints 10 <<2>>
END;
BEGIN
do_something(n);
dbms_output.put_line('after return: ' || n); -- prints 20
END;
NOCOPY模式用于限定OUT模式在調(diào)用時(shí)是不是以傳引用的方式進(jìn)行(它只是一個(gè)編譯器暗示,不一定總是起作用),默認(rèn)情況下,OUT模式的參數(shù)是以傳值的方式進(jìn)行調(diào)用的.
IN主要用于傳入?yún)?shù)的,雖然n2 := 20被調(diào)用,但是要到返回的時(shí)候才生效.如<<1>>所示.
NOCOPY是傳引用,會(huì)在賦值的時(shí)候立即生效 ,如<<2>>所示,如果在 返回之前發(fā)生異常,實(shí)際參數(shù)的值也會(huì)被改變.
由于OUT參數(shù)在 子程序返回的時(shí)候會(huì)將值copy到實(shí)際參數(shù),所以調(diào)用完后n的值為20,如<<3>>所示.
DECLARE
n NUMBER := 10;
PROCEDURE do_something (
n1 IN NUMBER,
n2 IN OUT NUMBER,
n3 IN OUT NOCOPY NUMBER) IS
BEGIN
n2 := 20;
dbms_output.put_line(n1); -- prints 10<<1>>
n3 := 30;
dbms_output.put_line(n1); -- prints 30 <<2>>
END;
BEGIN
do_something(n, n, n);
dbms_output.put_line(n); -- prints 20 <<3>>
END;
相關(guān)文章
Oracle 數(shù)據(jù)庫(kù)特殊查詢(xún)總結(jié)
這篇文章主要介紹了Oracle 數(shù)據(jù)庫(kù)特殊查詢(xún)總結(jié)的相關(guān)資料,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下2016-08-08Oracle 通過(guò)impdp導(dǎo)入報(bào)ORA-39002 ORA-39165錯(cuò)誤的解決方案
這篇文章主要介紹了Oracle 通過(guò)impdp導(dǎo)入報(bào)ORA-39002 ORA-39165錯(cuò)誤,本文給大家分享原因分析及解決方案,需要的朋友可以參考下2023-09-09Oracle創(chuàng)建自增字段--ORACLE SEQUENCE的簡(jiǎn)單使用介紹
在oracle中sequence就是所謂的序列號(hào),每次取的時(shí)候它會(huì)自動(dòng)增加,一般用在需要按序列號(hào)排序的地方接下來(lái)為大家介紹下Oracle創(chuàng)建自增字段方法感興趣的各位可不要錯(cuò)過(guò)了哈2013-03-03Oracle minus用法詳解及應(yīng)用實(shí)例
這篇文章主要介紹了Oracle minus用法詳解及應(yīng)用實(shí)例的相關(guān)資料,這里對(duì)oracle minus的用法進(jìn)行了具體實(shí)例詳解,需要的朋友可以參考下2017-01-01Oracle數(shù)據(jù)庫(kù)密碼重置、導(dǎo)入導(dǎo)出庫(kù)命令示例應(yīng)用
本節(jié)主要介紹了Oracle數(shù)據(jù)庫(kù)密碼重置、導(dǎo)入導(dǎo)出庫(kù)命令的基本使用,有需要的朋友可以學(xué)習(xí)下2014-07-07深入探討:Oracle中如何查詢(xún)正鎖表的用戶(hù)以及釋放被鎖的表的方法
本篇文章是對(duì)Oracle中查詢(xún)正鎖表的用戶(hù)以及釋放被鎖的表的方法進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下2013-05-05