Échapper au caractère ampersand dans la chaîne SQL
j'essaie d'interroger une certaine ligne par son nom dans ma base de données sql et elle a un ampli. J'ai essayé de mettre un caractère d'échappement, puis à s'échapper de l'esperluette, mais pour une raison quelconque, cela ne fonctionne pas et je suis incertain sur ce qu'est exactement mon problème.
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);
bien que cela ait une solution similaire à cette question , les problèmes sont posés très différemment. Ils peuvent finir par avoir la même solution, mais cela ne signifie pas que l' les questions sont les mêmes.
7 réponses
au lieu de
node_name = 'Geometric Vectors \& Matrices'
utiliser
node_name = 'Geometric Vectors ' || chr(38) || ' Matrices'
38 est le code ascii pour ampersand, et dans cette forme il sera interprété comme une chaîne, rien d'autre. Je l'ai essayé et cela a fonctionné.
une autre façon pourrait être d'utiliser comme et un soulignement à la place le caractère'&':
node_name LIKE 'Geometric Vectors _ Matrices'
la chance que vous trouverez un autre disque aussi, qui est différent dans ce seul caractère, est tout à fait faible.
"151930920 d'Évasion" est réglé sur \
par défaut , de sorte que vous n'avez pas besoin de le définir; mais si vous le faites, ne pas envelopper dans des guillemets.
Esperluette est le SQL*Plus de la variable de substitution marqueur; mais vous pouvez modifier , ou de façon plus utile dans votre cas, l'éteindre complètement, avec:
set define off
alors vous n'avez pas besoin de prendre la peine d'échapper à la valeur du tout.
vous pouvez utiliser
set define off
L'utilisation de cette il ne sera pas invite pour l'entrée
directement d'oracle SQL fundamentals book
SET DEFINE OFF
select 'Coda & Sid' from dual;
SET DEFINE ON
comment pourrait-on lui échapper sans définir le cadre.
set escape on
... node_name = 'Geometric Vectors \& Matrices' ...
ou alternativement:
set define off
... node_name = 'Geometric Vectors & Matrices' ...
le premier vous permet d'utiliser le backslash pour échapper au &.
Le deuxième s'éteint et "globalement" (pas besoin d'ajouter une barre oblique inverse n'importe où). Vous pouvez l'allumer de nouveau par set define on
et à partir de cette ligne sur les ampersands récupéreront leur signification spéciale, de sorte que vous pouvez l'éteindre pour certaines parties du script et pas pour d'autres.
Cela fonctionne ainsi:
select * from mde_product where cfn = 'A3D"&"R01'
vous définissez &
comme littéral en enfermant est avec double qoutes "&"
dans la chaîne.