Wie ignoriere ich kaufmännisches Und in einem SQL-Skript, das unter SQL Plus ausgeführt wird?


104

Ich habe ein SQL-Skript, das ein Paket mit einem Kommentar erstellt, der ein kaufmännisches Und (&) enthält. Wenn ich das Skript über SQL Plus ausführe, werde ich aufgefordert, einen Ersatzwert für die Zeichenfolge einzugeben, die mit & beginnt. Wie deaktiviere ich diese Funktion, damit SQL Plus das kaufmännische Und ignoriert?

Antworten:


181

Dies kann für Sie funktionieren:

set define off

Andernfalls muss das kaufmännische Und am Ende einer Zeichenfolge stehen.

'StackOverflow &' || ' you'

EDIT: Ich war klickfreudig beim Speichern ... Dies wurde aus einem Blog verwiesen .


2
Sie können dies auch in der Setup-Datei für das glogin.sql-Site-Profil oder in der Setup-Datei für das login.sql-Benutzerprofil angeben
David Aldridge,

Dies ist die einfachste Lösung, wenn Sie nicht an Substitutionsvariablen interessiert sind.
Drumbeg

Immer eine lebensrettende Lösung :) Danke.
Anjana Silva

25

Wenn Sie manchmal Substitutionsvariablen verwenden, möchten Sie die Definition möglicherweise nicht deaktivieren. In diesen Fällen können Sie das kaufmännische Und von seinem numerischen Äquivalent wie in konvertieren || Chr(38) ||oder es als einzelnes Zeichen wie in anhängen || '&' ||.


Das spezifische Szenario ist ein Paket, dessen Quelle ein kaufmännisches Und in einem Kommentar enthält. Ich sehe nicht ein, wie ich Verkettung oder Substitution dafür verwenden würde.
JoshL

JoshL, Sie haben Recht, ich habe dies der Vollständigkeit halber aufgelistet. Es hängt mit Ihrer Frage zusammen, obwohl es Ihre spezifische Frage nicht direkt beantwortet.
Leigh Riffel

Es hat mir tatsächlich geholfen.
Archimedes Trajano

13

Ich habe mit dem folgenden Code gelöst:

set escape on

und setzen Sie ein \ neben & in die linke 'value_\&_intert'

Att


Das hat bei mir funktioniert. Ich habe den Befehl verwendet, comment on column tablename.columnname is 'war ' || chr(38) || ' peace'aber er hat mir den Fehler gegeben ORA-01780: string literal required.
Frau Wadge

6

Sie können das Sonderzeichen, nach dem bei der Ausführung eines Skripts gesucht wird, mithilfe von auf einen anderen Wert setzen SET DEFINE <1_CHARACTER>

Standardmäßig ist die DEFINE-Funktion selbst aktiviert und auf & eingestellt

Es kann - wie bereits erwähnt - ausgeschaltet werden, aber es kann auch vermieden werden, indem es auf einen anderen Wert eingestellt wird. Achten Sie genau darauf, auf welches Zeichen Sie es setzen. Im folgenden Beispiel habe ich das Zeichen # gewählt, aber diese Auswahl ist nur ein Beispiel.

SQL> select '&var_ampersand #var_hash' from dual;
Enter value for var_ampersand: a value

'AVALUE#VAR_HASH'
-----------------
a value #var_hash

SQL> set define #
SQL> r
  1* select '&var_ampersand #var_hash' from dual
Enter value for var_hash: another value

'&VAR_AMPERSANDANOTHERVALUE'
----------------------------
&var_ampersand another value

SQL>

1
Ich habe diesen Ansatz kürzlich selbst verwendet. Ich mag es, da ich den Inhalt meiner PL / SQL-Pakete nicht ändern muss.
Drumbeg

3

set define off <- Dies ist die beste Lösung, die ich gefunden habe

Ich habe auch versucht ...

set define}

Ich konnte mehrere Datensätze mit kaufmännischen Und-Zeichen '&' einfügen, aber ich kann das Zeichen '}' nicht in den Text einfügen. Deshalb habe ich mich für "set define off" entschieden und alles funktioniert wie es sollte.


2

Nach dieser schönen FAQ gibt es ein paar Lösungen.

Möglicherweise können Sie das kaufmännische Und auch mit dem Backslash-Zeichen umgehen, \wenn Sie den Kommentar ändern können.


2
Das Backslash-Escape funktioniert nicht in SQL * Plus oder SQLDeveloper
Jim Tough

2
@ JimTough Es tut nach der Aktivierung mitset escape on
David Balažic

0

Ich hatte eine CASE-Anweisung mit WHEN column = 'sometext & more text' THEN ....

Ich habe es durch WHEN column = 'sometext' || ersetzt CHR (38) || 'mehr Text' DANN ...

Sie können auch die WHEN-Spalte LIKE 'sometext _ more text' THEN ...

(_ ist der Platzhalter für ein einzelnes Zeichen)

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.