--------------
#!/bin/bash
ls
sqlplus -s berke/berke <
declare
x char;
z char;
begin
select '&x' into z from dual;
dbms_output.put_line(z);
end;
/
exit;
EOF
ls
--------------
Yukarıdaki script içeriğimizde dual tablosundan bir select çekip orada da hangi değeri istediğimizi x değişkenine atıyoruz. Bu script'i çalıştırdığımızda ise bunu başaramıyoruz çünkü bize declare ile başlattığımız programımızın sonundaki yani "/" işaretinden sonraki ilk kelimeyi kendisine değer olarak almaktadır. Bu durumda x değişkenine exit kelimesi atanır.(x=exit) Biz burada kendimize bir değer sorulmasını istiyorsak bunu yapmanın 2 yolu vardır. İlki sql kodunu burada yazmaktansa bir script olarak çalıştırmaktır. 2'si ise dışardan değer olarak almaktır.
1- SQL Script'ini Shell Script İçerisinden Çağırmak:
İlk aşamada bash script'imizi aşağıdaki gibi oluştururuz.
------------
#!/bin/bash
ls
sqlplus -s apps/apps @deneme.sql
-----------
Deneme.sql adlı SQL script'imizi bize girdi(input) sorması için aşağıdaki gibi oluştururuz.
------------------
set serveroutput on;
select '&x' from dual;
exit;
-----------------
Örnek çıktısı aşağıdaki gibidir.
------------------------
Enter value for x: 10
old 1: select '&x' from dual
new 1: select '10' from dual
'1
--
10
------------------------
2- Dışardan Değer Atamak:
Buradaki mantığımızda script'imizin içerisinde kullanacağımız değeri script'e girmeden önce belirleriz. sonrasında SQL*Plus'a bağlandıktan sonra "$"'ı kullanaraktan o parametremizin değerini işleyebiliriz.
------------------------
#!/bin/bash
echo "Deger giriniz: \c"
read y
echo "Degerimiz: "$y
sqlplus -s apps/apps << EOF
set heading off;
set feedback off;
select $y from dual;
exit;
EOF
------------------------
Örnek Çıktı:
------------------------
Deger giriniz \c
10
Degerimiz: 10
10
------------------------
Modülerliği Arttırmak:
Script'imizi modüler yapmak içinse programımız tam bittiği anda değerlerimizi yerleştirebiliriz. Örneğin aşağıdaki programımızda 2 kere değer isteyen sonra da bu değerleri kullanan algoritma bulunmaktadır. Değişkenleri sürekli değiştirmektense programımızın sonuna program içerisinde herhangi bir yerde kullanılacak "a" ve "b" parametreleri için değerleri yerleştirebiliriz. Bu durumda a parametresinin değeri C ve b parametresini değeri D olur.(a='C' ve b='D')
---------------
ls
sqlplus -s apps/apps <
declare
d varchar2(10);
f varchar2(10);
begin
select '&a' into f from dual;
DBMS_OUTPUT.PUT_LINE(f);
select '&b' into d from dual;
dbms_output.put_line(d);
end;
/
C
D
exit;
EOF
---------------
Yukarıdaki script ile bash shell script'imizin içine değerlerde yapacağımız küçük değişikliklerle programımızın yönünü değiştirebiliriz.
Scriptimizin sonucu aşağıdaki gibidir.
---------------
Enter value for a: old 7: select '&a' into f from dual;
new 7: select 'C' into f from dual;
Enter value for b: old 9: select '&b' into d from dual;
new 9: select 'D' into d from dual;
C
D
PL/SQL procedure successfully completed.
---------------
Referanslar:
Hiç yorum yok:
Yorum Gönder