it-swarm.com.de

Escape-Zeichen in SQL-Zeichenfolge

Ich versuche, eine bestimmte Zeile nach Namen in meiner SQL-Datenbank abzufragen, und es gibt ein Et-Zeichen. Ich habe versucht, einen Escape-Charakter zu setzen und dann dem kaufmännischen Und-Zeichen zu entkommen, aber aus irgendeinem Grund funktioniert das nicht und ich bin mir nicht sicher, was genau mein Problem ist.

Set escape '\'
    select * from V1144engine.T_nodes where node_id in(
    select node2_id from V1144engine.T_edges where node1_id in(
    select node2_id from V1144engine.T_edges where node1_id in(
    select node2_id from V1144engine.T_edges where node1_id = 
      (select node_id from V1144engine.T_nodes where node_name = 'Geometric Vectors \& Matrices')))
    and Edge_type_id = 1)
    and node_type_id = 1
    and node_id in (
    select node2_id from V1144engine.T_edges where node1_id =
      (select node_id from V1144engine.T_nodes where node_name = 'Algebra II')
    and Edge_type_id = 2);

Obwohl dies eine ähnliche Lösung zu diese Frage hat, sind die Probleme sehr unterschiedlich. Sie haben zwar die gleiche Lösung, aber das bedeutet nicht, dass die Fragen gleich sind.

106

Anstatt 

node_name = 'Geometric Vectors \& Matrices'

benutzen 

node_name = 'Geometric Vectors ' || chr(38) || ' Matrices' 

38 ist der ASCII-Code für kaufmännisches Und, und in dieser Form wird es als Zeichenfolge interpretiert, sonst nichts. Ich habe es versucht und es hat funktioniert. 

Eine andere Möglichkeit wäre die Verwendung von LIKE und eine Unterstreichung anstelle des '&' - Zeichens: 

node_name LIKE 'Geometric Vectors _ Matrices' 

Die Chance, dass Sie auch eine andere Platte finden, die sich nur in diesem einen Zeichen unterscheidet, ist ziemlich gering. 

165
Imre Greilich

Escape ist standardmäßig auf \ eingestellt , Sie müssen es also nicht festlegen. Wenn Sie dies tun, packen Sie es nicht in Anführungszeichen.

Ampersand ist die SQL * Plus Substitutionsvariable marker; aber Sie können ändern oder nützlicher in Ihrem Fall schalten Sie es komplett aus, mit:

set define off

Dann brauchen Sie sich nicht um den Wert zu kümmern.

92
Alex Poole

Sie können verwenden

set define off

Bei Verwendung dieser Option wird keine Eingabeaufforderung angezeigt

36
Ankur

direkt aus dem Oracle SQL-Grundlagenbuch 

SET DEFINE OFF
select 'Coda & Sid' from dual;
SET DEFINE ON

wie würde man dem entkommen, ohne zu definieren.

25
Roman

Um zu entkommen & Sie können folgende Möglichkeiten ausprobieren: -

  1. set scan off
  2. set define off
  3. set escape on dann ersetzen & durch/&
  4. ersetze & durch &&

Einer von ihnen sollte mindestens arbeiten.

A Wenn Sie PL/SQL-Entwickler verwenden, gibt es im unteren Bereich des SQL-Fensters & Symbol. Gehen Sie dorthin und Deaktivieren. Beachten Sie, dass diese Option in älteren Versionen nicht vorhanden ist.

Stellen Sie außerdem sicher, dass set define off ganz am Anfang des Skripts geschrieben ist.

3
Shivendra Gupta
set escape on
... node_name = 'Geometric Vectors \& Matrices' ...

oder alternativ:

set define off
... node_name = 'Geometric Vectors & Matrices' ...

Im ersten können Sie den Backslash verwenden, um das & zu entkommen.

Die zweite Option ist "global" deaktiviert (es ist nicht erforderlich, irgendwo einen Backslash hinzuzufügen). Sie können ihn mit set define on wieder einschalten, und von dieser Zeile aus erhalten die Et-Zeichen ihre spezielle Bedeutung zurück. Sie können sie also für einige Teile des Skripts deaktivieren und nicht für andere.

1
David Balažic

Das funktioniert auch:

select * from mde_product where cfn = 'A3D"&"R01'

sie definieren & als Literal, indem Sie in der Zeichenfolge doppelte qoutes "&" einschließen.

0
copmac
REPLACE(<your xml column>,'&',chr(38)||'amp;')
0
user6385350