내 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 코드이며이 형식에서는 문자열로 해석됩니다. 나는 그것을 시도했고 효과가 있었다.
또 다른 방법은 LIKE와 밑줄 대신 ‘&’문자를 사용하는 것입니다.
node_name LIKE 'Geometric Vectors _ Matrices'
이 문자 하나만 다른 다른 레코드도 찾을 가능성은 매우 낮습니다.
답변
이스케이프는 \
기본적으로 설정되어 있으므로 설정할 필요가 없습니다. 하지만 그렇게한다면 따옴표로 묶지 마십시오.
앰퍼샌드는 SQL * Plus 치환 변수 마커입니다. 그러나 다음과 같이 변경 하거나 더 유용하게 사용할 수 있습니다 .
set define off
그런 다음 값을 이스케이프 처리 할 필요가 없습니다.
답변
당신이 사용할 수있는
set define off
이것을 사용하면 입력하라는 메시지가 표시되지 않습니다
답변
오라클 SQL 기초 책에서 바로
SET DEFINE OFF
select 'Coda & Sid' from dual;
SET DEFINE ON
define을 설정하지 않고 어떻게 벗어날 수 있을까요?
답변
탈출하기 위해 &
다음과 같은 방법을 시도 할 수 있습니다 :-
set scan off
set define off
set escape on
다음 대체&
에 의해/&
- 교체
&
로&&
그들 중 하나는 적어도 작동해야합니다.
사용하는 dditionally 경우 PL / SQL 개발자는이 및 아이콘 SQL 창 하단에서이 가서하시기 바랍니다 비활성화 를 . 이전 버전에서는이 옵션이 없습니다.
또한 set define off가 스크립트의 맨 처음에 작성되었는지 확인하십시오.
답변
이것은 또한 작동합니다 :
select * from mde_product where cfn = 'A3D"&"R01'
문자열에 &
이중 qoutes "&"
를 포함하여 리터럴로 정의 합니다.
답변
set escape on
... node_name = 'Geometric Vectors \& Matrices' ...
또는 대안 적으로 :
set define off
... node_name = 'Geometric Vectors & Matrices' ...
첫 번째는 백 슬래시를 사용하여 &를 피할 수 있습니다.
두 번째는 “전역 적으로”꺼지고 “어딘가에 백 슬래시를 추가 할 필요가 없습니다”. set define on
앰퍼샌드의 해당 줄에서 다시 켜면 특별한 의미가 다시 표시되므로 스크립트의 일부 부분에서는 사용하지 않을 수 있습니다.