Oracle SQL kaçış karakteri ("&" için)


86

Oracle SQL Developer kullanarak SQL ekleme deyimlerini yürütmeye çalışırken "İkame değerini girin" komut istemini oluşturmaya devam ediyorum:

insert into agregadores_agregadores 
(
 idagregador,
 nombre,
 url
) 
values 
(
 2,
 'Netvibes',
 'http://www.netvibes.com/subscribe.php?type=rss\&url='
);

Sorgudaki özel karakterden yukarıdaki "\" karakterini kullanarak kaçmayı denedim , ancak yine de "&" işaretinden kaçınamıyorum ve bir dize değiştirmesine neden oluyor.

Yanıtlar:


127

DEFINE için &, ikame değişkenlerini kullanmanıza izin veren varsayılan değerdir. Kullanarak kapatmayı seviyorum

TANIMLAMAYI KAPAT

o zaman kaçış veya CHR (38) konusunda endişelenmenize gerek kalmaz.


60

|| chr(38) ||

Bu çözüm mükemmel.


2
Bu, işi bitirir, ancak önceden var olan dizelerle uğraşırken biraz hantaldır.
aglassman

Benim için SET DEFINE OFF çalışmadı. Çözümünüz işe yarayacak. Teşekkür ederim ...
Ashok kumar

31

Tanımlama karakterini & dışında bir şeye ayarlayın

TANIMLA AYARLA ~
tablo blah (x varchar (20)) oluştur;
blah (x) değerlerine ekle ('blah & amp');
blah'dan * seçin;

X                    
-------------------- 
blah & amp 


15
insert into AGREGADORES_AGREGADORES (IDAGREGADOR,NOMBRE,URL)
values (2,'Netvibes',
'http://www.netvibes.com/subscribe.php?type=rss' || chr(38) || 'amp;url=');

|| ile çözüm sağladığı için Jeffrey Kemp'e teşekkürler. chr (38) ||

Bu, kullanıcı ayrıcalıklarından bağımsız olan (yani kullanıcıların TANIMLAMAYI KAPATMAYA izin verilmediğinde) ve kullanıcıların metinde hem ampersanı hem de aynı SQL komutunda tanımlı değişkenleri belirtmek istediklerinde çok daha iyi bir genel çözümdür.
Fuzzy Analysis

12
SELECT 'Free &' || ' Clear' FROM DUAL;

4

select 'one'||'&'||'two' from dual


Ve işaretinin yalnızca dizenin sonunda olması gerekir, böylece birleştirmenin yarısını korur. select 'one&' || 'two' from dual
durette

1

Gerçek cevap, çıkış karakterini '\' olarak ayarlamanız gerektiğidir: SET ESCAPE ON

Sorun, çıkış devre dışı bırakıldığı için veya çıkış karakteri '\' dışında bir şeye ayarlandığı için ortaya çıkmış olabilir. Yukarıdaki ifade, kaçmayı etkinleştirecek ve "\" olarak ayarlayacaktır.


Daha önce gönderilen diğer yanıtların hiçbiri aslında orijinal soruyu yanıtlamıyor. Hepsi problemin etrafında çalışır ama çözmez.


4
Ask Tom'da ( asktom.oracle.com/pls/asktom/… ) "SET ESCAPE bir sqplus'ism" olduğunu okudum. Dolayısıyla, soru SQL * Plus ile ilgili olsaydı bu yalnızca gerçek cevap olurdu.
Karl Kieninger

-1

bunu isteğinizden önce ekleyin

set define off;
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.