私は私のSQLデータベース内の名前で特定の行を照会しようとしているとそれはアンパサンドがあります。私はエスケープ文字を設定してからアンパサンドをエスケープしようとしましたが、何らかの理由でこれが機能せず、私の問題が正確にはわからないのですが。
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);
これは この質問 に似た解決策を持っていますが、問題は非常に異なって提起されています。彼らは同じ解決策を持つことになるかもしれませんが、それは質問が同じであることを意味するのではありません。
の代わりに
node_name = 'Geometric Vectors \& Matrices'
つかいます
node_name = 'Geometric Vectors ' || chr(38) || ' Matrices'
38はアンパサンドのASCIIコードで、この形式では文字列として解釈されます。試してみましたが、うまくいきました。
もう1つの方法は、LIKEとアンダーラインを代わりに使用することです。
node_name LIKE 'Geometric Vectors _ Matrices'
この1文字だけが異なる他のレコードも見つける可能性は非常に低いです。
エスケープはデフォルトで\
に設定されています ですので、設定する必要はありません。しかし、もしそうなら、それを引用符で囲まないでください。
アンパサンドはSQL * Plus 置換変数 マーカーです。しかし、あなたは それを変更する 、あるいはもっと便利には完全にそれをオフにすることができます。
set define off
そうすれば、値をエスケープする必要はまったくありません。
あなたが使用することができます
set define off
これを使っても入力を促さない
oracleのSQLの基本の本から直接
SET DEFINE OFF
select 'Coda & Sid' from dual;
SET DEFINE ON
defineを設定せずにどうやってそれをエスケープするのでしょう。
&
をエスケープするには、以下の方法を試してください。 -
set scan off
set define off
set escape on
は&
を/&
に置き換えます&
を&&
に置き換えますそのうちの1人は少なくとも動くはずです。
A 従来PL/SQL開発者を使用している場合は、SQLウィンドウの下部に&アイコンがあり、そこに移動して無効にしてくださいそれ。旧バージョンでは、このオプションは存在しません。
また、set define offがスクリプトの最初に書かれていることを確認してください。
set escape on
... node_name = 'Geometric Vectors \& Matrices' ...
あるいは、
set define off
... node_name = 'Geometric Vectors & Matrices' ...
最初の例ではバックスラッシュを使って&をエスケープすることができます。
2番目はオフになり、「グローバルに」(どこにもバックスラッシュを追加する必要はありません)。 set define on
でそれを再びオンにすることができ、アンパサンド上のその行からそれらの特別な意味が取り戻されるので、スクリプトの一部ではなく他ではオフにすることができます。
これも同様に機能します。
select * from mde_product where cfn = 'A3D"&"R01'
&
をリテラルとして定義するには、文字列内に"&"
の二重引用符を付けます。
REPLACE(<your xml column>,'&',chr(38)||'amp;')