문제

& 문자를 포함하는 삽입 문을 어떻게 작성할 수 있습니까? 예를 들어, "J & J Construction"을 데이터베이스의 열에 삽입하려는 경우.

그것이 차이가 있는지 확실하지 않지만 Oracle 9i를 사용하고 있습니다.

도움이 되었습니까?

해결책

나는 이것을 계속 잊어 버리고 다시 돌아온다! 최선의 대답은 지금까지 제공된 응답의 조합이라고 생각합니다.

첫째, & & sqlplus/sqldeveloper의 변수 접두사입니다. 따라서 문제가 나타나면 변수 이름의 일부가 될 것으로 예상됩니다.

SET DEFINE OFF는 SQLPLUS 해석 및이 방법을 중지합니다.

그러나 sqlplus 변수를 사용해야한다면 어떨까요? 그리고 리터럴 & 캐릭터?

  • 변수가 작동하도록 설정 정의가 필요합니다
  • 그리고 &의 탈출로 탈출하십시오.

예를 들어

set define on
set escape on

define myvar=/forth

select 'back\\ \& &myvar' as swing from dual;

생산 :

old   1: select 'back\\ \& &myvar' from dual
new   1: select 'back\ & /forth' from dual

SWING
--------------
back\ & /forth

다른 탈출 문자를 사용하려면 :

set define on
set escape '#'

define myvar=/forth

select 'back\ #& &myvar' as swing from dual;

특정 탈출 문자를 설정하면 'SP2-0272 : 탈출 문자가 영숫자 또는 공백이 될 수 없습니다'가 표시 될 수 있습니다. 이것은 아마도 당신이 이미 탈출 캐릭터를 정의했으며 상황이 끔찍하게 자기 참조되는 것을 의미합니다. 이 문제를 피하는 깨끗한 방법은 먼저 탈출을 설정하는 것입니다.

set escape off
set escape '#'

다른 팁

SQLPLUS 사용에서 수행하는 경우

SET DEFINE OFF  

트레딩을 중단하고 특별한 경우

대체 솔루션, 연결 및 CHR 기능을 사용하십시오.

select 'J' || chr(38) || 'J Construction' from dual;

올바른 구문은입니다

set def off;
insert into tablename values( 'J&J');

ASCII 코드를 문자열로 변환하는 chr () 함수는 항상 있습니다.

즉. 같은 것 : 테이블 값에 삽입 (COCAT ( 'j', chr (38), 'j'))

프로그램에서 항상 매개 변수화 쿼리를 사용하십시오. SQL 주입 공격뿐만 아니라 SQL 파서에게 특별한 다른 문자를 피합니다.

다음 옵션 중 하나를 사용하는 것이 좋습니다.

SET DEF OFF

또는

SET SCAN OFF

데이터베이스에 대해 하나가 다른 것보다 더 낫거나 "더 옳다"는 것을 알기에 충분히 알지 못합니다. 또한이 중 하나보다 더 좋은 것이 있다면 알려주십시오.

그러한 문자열을 삽입 할 수 있습니다 'J'|| '&'|| '건축'. 잘 작동합니다.

insert into table_name (col_name) values('J'||'&'||'Construction');
INSERT INTO TEST_TABLE VALUES('Jonhy''s Sport &'||' Fitness')

이 쿼리의 출력 : Jonhy 's Sport & Fitness

SET ESCAPE ON;
INSERT VALUES("J\&J Construction") INTO custnames;

(테스트되지 않은 것은 오라클 상자가없고 오랜 시간이 지났습니다)

SQL Plus를 사용하는 경우 명령을 발행해야한다고 생각합니다.

SET SCAN OFF

SQL/Plus 사용을 중단하면 적극 권장합니다 PL/SQL 개발자 SQL 도구 이상입니다.

추신 일부 사람들은 선호합니다 두꺼비.

앤드류 :

"J & J Construction":

SELECT CONCAT('J', CONCAT(CHR(38), 'J Construction')) FROM DUAL;
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top