PL/SQL parametreler genel olarak 3 türlüdür.IN, OUT ve INOUT. Programlama dillerinde bulunan pass by value ve pass by reference kavramları PL/SQL için de geçerlidir. IN olarak gelen parametreler referans olarak gelir, veri kopyalanmaz. Diğer iki durumda ise parametrelerin bir kopyası oluşturularak fonksiyona gönderilir. Bu bakıma, boyutu yüksek veriler parametre olarak aktarılırken verinin bir kopyasının oluşturularak gönderileceği unutulmamalıdır. İstenirse NOCOPY ile bu verilerin kopyalanmaması sağlanmabilmesine rağmen birtakım kullanım kısıtları içermesi bakımından dikkat edilmesi gereklidir. Ayrıca IN ile gönderilen parametreler sadece okunabilirken, OUT ile gönderilen parametreler ise sadece yazılabilir durumdadır.
CREATE OR REPLACE PROCEDURE test(i IN NUMBER, --Read ONLY, Pass by ref
k OUT NUMBER, --WRITE ONLY, Pass by Val + rereturn the value back
m IN OUT NUMBER --Rad-WRITE, Pass by Val + rereturn the value back
) IS
BEGIN
dbms_output.put_line('In procedure:');
dbms_output.put_line('i = ' || i);
dbms_output.put_line('k = ' || k);--It will not contain any value. Write ONLY
dbms_output.put_line('m = ' || m);
--i := 100;--Can not modifiy READ ONLY
k := 1000;
m := 10000;
END test;
DECLARE
ii NUMBER := 200;
kk NUMBER := 2000;
mm NUMBER := 20000;
BEGIN
dbms_output.put_line('Before procedure:');
dbms_output.put_line('i = ' || ii);
dbms_output.put_line('k = ' || kk);
dbms_output.put_line('m = ' || mm);
test(ii, kk, mm);
dbms_output.put_line('After procedure:');
dbms_output.put_line('i = ' || ii);
dbms_output.put_line('k = ' || kk);
dbms_output.put_line('m = ' || mm);
END;
Çıktı ise
Before procedure:
i = 200
k = 2000
m = 20000
In procedure:
i = 200
k =
m = 20000
After procedure:
i = 200
k = 1000
m = 10000
olacaktır.
No comments:
Post a Comment