So vermeiden Sie das Ersetzen von Variablen in Oracle SQL Developer mit 'trinidad & tobago'

111

Wenn ich versuche, diese Anweisung in Oracle SQL Developer 2.1 auszuführen, wird ein Dialogfeld "Substitutionsvariable eingeben" angezeigt , in dem Sie nach einem Ersatzwert für TOBAGO gefragt werden.

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

Wie kann ich dies vermeiden, ohne auf den Zweck der Aussage zurückzugreifen chr(38)oder u'trinidad \0026 tobago'beides zu verschleiern?

Janek Bogucki
quelle
1
Das ist seltsam, als ich versuchte, eine Abfrage genau so in SQL Developer 2.1 auszuführen, bekam ich das Fenster für die Ersatzvariable nicht? (Und meine
Definitionen
Diese Frage hat mir sehr geholfen.
Oh Chin Boon

Antworten:

191

Rufen Sie dies vor der Abfrage auf:

set define off;

Alternativ hacky:

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

Vom Optimieren von SQL * Plus :

SET DEFINE OFF deaktiviert das Parsen von Befehlen, um Substitutionsvariablen durch ihre Werte zu ersetzen.

Nick Craver
quelle
9
Was macht (sonst) set define off;?
Xonatron
15

In SQL * Plus SET DEFINE ?wird dies normalerweise gelöst, wenn Sie oben im Skript stehen. Könnte auch für Oracle SQL Developer funktionieren.

diederikh
quelle
2
SET DEFINE? unterdrückt das Variablensubstitutionsverhalten in SQL Developer 2.1. Wie von Nick bemerkt, funktioniert SET DEFINE OFF auch.
Janek Bogucki
set define funktioniert, aber der DBA erlaubt es nicht, es manchmal zu verwenden. Ich weiß nicht warum
nikhil sugandh
1

Dies funktioniert so, wie Sie es ohne CHAR (38) gefragt haben:

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';
Nikil Sugandh
quelle
Meine Frage war, wie dies ohne Verwendung gemacht werden könnte chr(38).
Janek Bogucki
@ JanekBogucki nehmen Sie es jetzt richtig, ohne CHAR (38) zu verwenden
nikhil sugandh
Ich gab Ihnen eine andere Antwort, da Sie bereits eine grün angekreuzte Antwort haben, aber Sie haben herabgestimmt
nikhil sugandh
Kumpel, Sie können sich nicht vorstellen, was für eine Qual Sie für mich gelöst haben. Der SQL-Entwickler akzeptiert keine Set-Definition, wenn Sie ein Skript ausführen. Dies ist die Lösung für mich
BrokenFrog
-3

Ich hatte auch ein Problem damit. Jedes Mal, wenn ich versuchte, eine Verbindung zu einer Datenbank herzustellen, wurde etwas gestartet.

Was für mich funktioniert hat, war das Entfernen eines Startskripts, das Sie möglicherweise konfiguriert haben!

dh Tools>Preferences...>Databaseund entfernen Sie alle Dateipfade, die Sie im Textfeld "Dateiname für Verbindungsstart-Skript" haben!

ufo2mstar
quelle
-3

Scan ausschalten; Der obige Befehl funktioniert auch.

Dinesh Garud
quelle
Dies gibt keine Antwort auf die Frage. Um einen Autor zu kritisieren oder um Klärung zu bitten, hinterlassen Sie einen Kommentar unter seinem Beitrag. Sie können jederzeit Ihre eigenen Beiträge kommentieren. Sobald Sie einen ausreichenden Ruf erworben haben, können Sie jeden Beitrag kommentieren. Wenn Sie eine verwandte, aber andere Frage haben, stellen Sie eine neue Frage, die auf diese verweist, wenn dies zur Bereitstellung des Kontexts beiträgt.
Rohan Khude