Oracle SQL 이스케이프 문자 ( '&'용)


86

Oracle SQL Developer를 사용하여 SQL 삽입 문을 실행하려고 시도하는 동안 "대체 값 입력"프롬프트가 계속 생성됩니다.

insert into agregadores_agregadores 
(
 idagregador,
 nombre,
 url
) 
values 
(
 2,
 'Netvibes',
 'http://www.netvibes.com/subscribe.php?type=rss\&url='
);

위의 '\'를 사용 하여 쿼리에서 특수 문자를 이스케이프 하려고 시도 했지만 여전히 앰퍼샌드 '&'를 피할 수 없어 문자열 대체가 발생합니다.

답변:


127

&는 대체 변수를 사용할 수있는 DEFINE의 기본값입니다. 나는 그것을 사용하여 끄고 싶다.

정의 설정 해제

그러면 탈출이나 CHR (38)에 대해 걱정할 필요가 없습니다.


60

|| chr(38) ||

이 솔루션은 완벽합니다.


2
이렇게하면 작업이 완료되지만 기존 문자열을 다룰 때는 약간 어색합니다.
aglassman 2013-09-05

나를 위해 SET DEFINE OFF가 작동하지 않았습니다. 귀하의 솔루션이 작동합니다. 감사합니다 ...
Ashok kumar

31

정의 문자를 & 이외의 것으로 설정하십시오.

SET DEFINE ~
blah 테이블 생성 (x varchar (20));
blah (x) 값에 삽입 ( 'blah & amp');
blah에서 *를 선택하십시오.

엑스                    
-------------------- 
blah & amp 


27
또는 SET DEFINE OFF
dpbradley

15
insert into AGREGADORES_AGREGADORES (IDAGREGADOR,NOMBRE,URL)
values (2,'Netvibes',
'http://www.netvibes.com/subscribe.php?type=rss' || chr(38) || 'amp;url=');

솔루션을 제공 한 Jeffrey Kemp에게 || chr (38) ||

이것은 사용자 권한 (즉, 사용자가 SET DEFINE OFF를 허용하지 않는 경우)과 독립적이고 사용자가 동일한 SQL 명령에서 텍스트에 앰퍼샌드와 정의 된 변수를 모두 지정하려는 경우 훨씬 더 나은 일반 솔루션입니다.
퍼지 분석

12
SELECT 'Free &' || ' Clear' FROM DUAL;

4

select 'one'||'&'||'two' from dual


앰퍼샌드는 문자열 끝에 만 있어야하므로 연결의 절반을 절약 할 수 있습니다. select 'one&' || 'two' from dual
durette 19-07-24

1

진짜 대답은 이스케이프 문자를 '\'로 설정해야한다는 것입니다. SET ESCAPE ON

이스케이프가 비활성화되었거나 이스케이프 문자가 '\'가 아닌 다른 것으로 설정 되었기 때문에 문제가 발생했을 수 있습니다. 위의 문은 탈출있게 하고 그것으로 '\'로 설정합니다.


이전에 게시 된 다른 답변 중 실제로 원래 질문에 대한 답변이 없습니다. 그들은 모두 문제를 해결하지만 해결하지는 않습니다.


4
나는 Ask Tom ( asktom.oracle.com/pls/asktom/… )에서 "SET ESCAPE는 sqplus'ism이다"라고 읽었습니다. 따라서 질문이 SQL * Plus에 대한 질문 인 경우에만 실제 답이 될 것입니다.
Karl Kieninger 2014 년

-1

요청하기 전에 이것을 추가하십시오

set define off;
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.