14 September 2006

Parameter Types For PL/SQL Program Blocks

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: