Tablo İçeriğine & Karakteri Ekleme (Oracle)

By Enver Hemen - Mart 12, 2018

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 ('&Dr.DoWhile');
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 &Dr.DoWhile girilen yerlere atama yapmamız istenir. Oysa ki yapmak istediğimiz, direk olarak &Dr.DoWhile 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 ('&Dr.DoWhile');
Enter value for Hazal: Merhaba Dunya
old   1: insert into test (Ad)
values ('&Dr.DoWhile')
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 &Dr.DoWhile 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 @
    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)||'Dr.DoWhile  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 ('&'||'Dr.DoWhile yyy');
        1 row created.
        SQL> select * from test
        where Ad like '% yyy';
        AD
        —————————————————————————
        &Dr.DoWhile yyy 
         
        

  • Paylaş:

Bunları da beğenebilirsin

0 yorum