SQL * Plus Oracle'da bağlama değişkenleri ve ikame değişkenler arasındaki farklar hakkında bazı karışıklık var görünüyor.
Değiştirme değişkenleriyle başlayalım. İkame değişkenleri SQL * Plus'a özgüdür ve veritabanının bir parçası değildir. Örneğin, bunları JDBC ile kullanmaya çalışırsanız çalışmazlar.
Yerine koyma değişkenleri yalnızca bir metin parçası tutabilir. SQL * Plus, girişlerin bir satırında bir ikame değişken karşılaşırsa, onun metin içeriğiyle değişkeni yerini alacak: SQL * Plus, bunun olmadığını hiç dikkate almadan kendi metin değeri ile bizim ikame değişken yerini o
SQL> define subvar=X
SQL> select * from dual where dummy = &subvar;
old 1: select * from dual where dummy = &subvar
new 1: select * from dual where dummy = X
select * from dual where dummy = X
*
ERROR at line 1:
ORA-00904: "X": invalid identifier
Not
Bize geçerli bir SQL verdi. Yukarıdaki örnekte,
&subvar
arasındaki tek tırnakları çıkardık ve bize geçersiz SQL verdi, bu yüzden bir hata oluştu.
old
ve new
başlangıç çizgileri, SQL * Plus'ın değiştirme değişkenlerini uyguladıktan önce ve sonra girdiğimiz satırı gösterir. new
satırı, veritabanının çalışmaya çalıştığı çizgi.
ve new
satırlarının görüntüsünü SET VERIFY ON
ve SET VERIFY OFF
kullanarak etkinleştirebilir veya devre dışı bırakabilirsiniz. Ayrıca, SET DEFINE ON
ve SET DEFINE OFF
kullanarak ikame değişkenlerinin değiştirilmesini açabilir veya kapatabilirsiniz. biz ikame değişken kullanarak yukarıdaki sorguyu çalıştırmak istiyorsanız
, bunu tırnak koymak gerekir:
SQL> select * from dual where dummy = '&subvar';
old 1: select * from dual where dummy = '&subvar'
new 1: select * from dual where dummy = 'X'
D
-
X
&subvar
geçerli bir sayı olan bir dize içeren olursa (mesela 5
), o zaman tırnak işaretleri kullanmadan uzaklaşabilir, ancak bu sadece &subvar
metnini çıkarmak ve onu 5
metinle değiştirmemizin bize geçerli SQL vermesi nedeniyle gerçekleşir.
Örneğin, biz de şu verilerle test
denilen bir tablo olduğunu varsayalım:
A
----------
1
2
3
4
5
Sonra diğer taraftan, türlerine sahip,
SQL> define subvar=5
SQL> select * from test where a = &subvar;
old 1: select * from test where a = &subvar
new 1: select * from test where a = 5
A
----------
5
Bind değişkenleri yapabilirsiniz. Basit metin değerleri değildirler. Değerleri veritabanına gönderilir ve veritabanı da değerlerini belirleyebilir.
SQL> variable bindvar varchar2(1);
SQL> exec :bindvar := 'X';
PL/SQL procedure successfully completed.
Bunu kullanmak istediğinizde bir bağlama değişkeni tırnak koymak yoktur:
SQL> select * from dual where dummy = :bindvar;
D
-
X
SQL> select * from dual where dummy = ':bindvar';
no rows selected
İkinci örnekte yukarıdaki, biz DUAL
tablo ile hiçbir satır var çünkü hiçbir satır döndürdü var :bindvar
numaralı metni içeren DUMMY
sütun.
bir bağlama değişkene yanlış türde bir değer atamak denerseniz bir hata alırsınız:
SQL> variable bindvar number;
SQL> exec :bindvar := 'X';
BEGIN :bindvar := 'X'; END;
*
ERROR at line 1:
ORA-06502: PL/SQL: numeric or value error: character to number conversion error
ORA-06512: at line 1
Bind değişkenleri veritabanının standart bir parçası vardır ve JDBC ile kullanabilirsiniz ya da seçtiğiniz veritabanına bağlanma yöntemi.
Son olarak
variable num1 number
ve
var num1 number
ikisi de aynı anlama geliyor. Her ikisi de
num1
number
türünde bir bağlama değişkeni tanımlar.
var
sadece
variable
için bir kısaltmadır.