Jak uniknąć zastępowania zmiennych w Oracle SQL Developer za pomocą „Trinidad & Tobago”

111

Kiedy próbuję wykonać tę instrukcję w Oracle SQL Developer 2.1, pojawia się okno dialogowe „Wprowadź zmienną substytucji” z prośbą o zastąpienie wartości TOBAGO ,

update t set country = 'Trinidad and Tobago' where country = 'trinidad & tobago';

Jak mogę tego uniknąć, nie uciekając się do tego, chr(38)lub u'trinidad \0026 tobago'które jedno i drugie przesłania cel stwierdzenia?

Janek Bogucki
źródło
1
To dziwne, kiedy próbowałem uruchomić zapytanie dokładnie takie jak w SQL Developer 2.1, nie otrzymałem okna zmiennej zastępczej? (A moje definicje są z całą pewnością włączone)
wasatz
To pytanie bardzo mi pomogło.
Oh Chin Boon

Odpowiedzi:

192

Wywołaj to przed zapytaniem:

set define off;

Alternatywnie, hacky:

update t set country = 'Trinidad and Tobago' where country = 'trinidad &' || ' tobago';

Od Tuning SQL * Plus :

SET DEFINE OFF wyłącza analizowanie poleceń w celu zastąpienia zmiennych podstawionych ich wartościami.

Nick Craver
źródło
9
Co (jeszcze) robi set define off;?
Xonatron
15

W SQL * Plus umieszczenie SET DEFINE ?na górze skryptu zwykle rozwiązuje ten problem. Może działać również dla Oracle SQL Developer.

dieerikh
źródło
2
USTAWIĆ DEFINE? pomija zachowanie podstawiania zmiennych w SQL Developer 2.1. Jak zauważył Nick, funkcja SET DEFINE OFF również działa.
Janek Bogucki
set define działa, ale DBA nie pozwala na jego użycie czasami nie wiem dlaczego
nikhil sugandh
1

to będzie działać tak, jak prosiłeś, bez CHAR (38):

update t set country = 'Trinidad and Tobago' where country = 'trinidad & '|| 'tobago';

create table table99(col1 varchar(40));
insert into table99 values('Trinidad &' || '  Tobago');
insert into table99 values('Trinidad &' || '  Tobago');
insert into table99 values('Trinidad &' || '  Tobago');
insert into table99 values('Trinidad &' || '  Tobago');
SELECT * FROM table99;

update table99 set col1 = 'Trinidad and Tobago' where col1 = 'Trinidad &'||'  Tobago';
nikhil sugandh
źródło
Moje pytanie brzmiało, jak można to zrobić bez użycia chr(38).
Janek Bogucki
@JanekBogucki weź to poprawnie teraz bez użycia CHAR (38)
nikhil sugandh
Dałem ci inną odpowiedź, ponieważ już masz zieloną odpowiedź, ale nie zgodziłeś się
nikhil sugandh
Kolego, nie możesz sobie wyobrazić, jaką mękę rozwiązałeś dla mnie, programista sql nie akceptuje set define off, gdy uruchamiasz skrypt. To rozwiązanie dla mnie
BrokenFrog
-3

Ja też miałem z tym jakiś problem. Coś się uruchamiało za każdym razem, gdy próbowałem skonfigurować połączenie z dowolną bazą danych.

U mnie zadziałało usunięcie dowolnego skonfigurowanego przez Ciebie skryptu startowego!

ie Tools>Preferences...>Databasei usuń ścieżkę do pliku, którą masz w polu tekstowym oznaczonym "Nazwa pliku dla skryptu uruchamiania połączenia"!

ufo2mstar
źródło
-3

wyłącz skanowanie; Powyższe polecenie działa również.

Dinesh Garud
źródło
To nie daje odpowiedzi na pytanie. Aby skrytykować lub poprosić autora o wyjaśnienie, zostaw komentarz pod jego postem - zawsze możesz komentować własne posty, a gdy zdobędziesz wystarczającą reputację, będziesz mógł komentować każdy post. Jeśli masz podobne, ale inne pytanie, zadaj nowe pytanie odnoszące się do tego, jeśli pomoże to w dostarczeniu kontekstu.
Rohan Khude