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.
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.
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.
Sie können verwenden
set define off
Bei Verwendung dieser Option wird keine Eingabeaufforderung angezeigt
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.
Um zu entkommen &
Sie können folgende Möglichkeiten ausprobieren: -
set scan off
set define off
set escape on
dann ersetzen &
durch/&
&
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.
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.
Das funktioniert auch:
select * from mde_product where cfn = 'A3D"&"R01'
sie definieren &
als Literal, indem Sie in der Zeichenfolge doppelte qoutes "&"
einschließen.
REPLACE(<your xml column>,'&',chr(38)||'amp;')