Merhabalar bu yazımda karşılaştığım bir problemi ve karşılaştığım çözümler hakkında yazacağım.
Aşağıdaki şekilde bir tabloya bir değer girmek istediğimi varsayalım:
CREATE TABLE test (Ad varchar2(35)); INSERT INTO test values ('&Hazal');
Ancak sistem & kullandığımızda bir değer atamamızı ister. Peki ve (&) işareti koymak istediğimizde ne yapacağız? Bu sorunun cevabını AskTom (asktom.oracle.com) ‘da buldum ve direkt çevirerek sizinle paylaşmak istiyorum.
Öncelikle problemin ne olduğunu daha iyi anlayalım. SQL*Plus’ta &Hazal girilen yerlere atama yapmamız istenir. Oysa ki yapmak istediğimiz, direk olarak &Hazal formatıyla tablo içeriğine alınmasıdır. SQL*Plus’ta şu şekilde görebiliriz bu durumu:
SQL> insert into test (Ad) values ('&Hazal'); Enter value for Hazal: Merhaba Dunya old 1: insert into test (Ad) values ('&Hazal') new 1: insert into test (Ad) values (' Merhaba Dunya') 1 row created.
Bu durumda tablodan veri çektiğimizde şu durum ortaya çıkar:
SQL> select * from test; AD ——————————————————————— Merhaba Dunya
Burada &Hazal Merhaba Dunya şekline dönüştürülmüştür.
- Bu durumu durdurmanın en basit yollarından biri SQL*Plus set define off komutunu kullanmaktır.
SQL> set define off SQL> insert into test (Ad) values ('&Hazal'); 1 row created. SQL> select * from test; AD ——————————————————————— Merhaba Dunya &Hazal
- Bu durum SQL*Plus’ta atama karakteri bulunmasını engeller. Yerine yeni bir atama karakteri koyarak bunu da geçiştimiş oluruz.
SQL> set define @ SQL> insert into test (Ad) values ('&Hazal @X'); Enter value for x: girilen deger old 1: insert into test (Ad) values ('&Hazal @X') new 1: insert into test (Ad) values (' &Hazal girilen deger’) 1 row created.
- Ya da & karakterini kullanmaktan kaçınabiliriz.
SQL> insert into test values (chr(38)||'Hazal xxx'); 1 row created. SQL> select * from test where Ad like '% xxx'; NAME ————————————————————————— &Hazal xxx
- chr(38) yerine sanırım ‘&’ kullanılabilir.
SQL> insert into test values ('&'||'Hazal yyy'); 1 row created. SQL> select * from test where Ad like '% yyy'; AD ————————————————————————— &Hazal yyy
İyi Çalışmalar
Hazal Çıplak