programing

&을 포함하는 문자열을 삽입하는 방법

linuxpc 2023. 3. 17. 19:38
반응형

&을 포함하는 문자열을 삽입하는 방법

& 문자를 포함한 삽입문은 어떻게 써야 하나요?예를 들어 데이터베이스의 열에 "J&J Construction"을 삽입하는 경우.

차이가 있을지는 모르겠지만 Oracle 9i를 사용하고 있습니다.

자꾸 까먹었다가 다시 돌아온다!지금까지의 답변을 조합한 것이 가장 좋은 답이라고 생각합니다.

첫 번째로 &은 sqlplus/sqldeveloper 변수 프레픽스입니다.이 때문에 문제가 발생합니다.이러한 프레픽스는 변수 이름의 일부가 될 것으로 예상됩니다.

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

그러나 sqlplus 변수와 리터럴 & 문자를 사용해야 하는 경우에는 어떻게 해야 합니까?

  • 변수를 작동시키려면 SET DEFAINE ON이 필요합니다.
  • SET Escape ON으로 &의 사용을 회피합니다.

예.

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');

아스키 코드를 문자열로 변환하는 chr() 함수는 항상 존재합니다.

(예: 테이블 값에 삽입(CONCAT('J', CHR(38', 'J')))

J'|'&'|'Construction'과 같은 문자열을 삽입할 수 있습니다.잘 되고 있어요.

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

이 질문의 결과: Jonhy's Sport & Fitness

SET SCAN OFF는 폐지되었습니다.http://download-uk.oracle.com/docs/cd/B10501_01/server.920/a90842/apc.htm

프로그램에서는 항상 파라미터화된 쿼리를 사용합니다.SQL Injection 공격뿐만 아니라 SQL 파서에 고유한 다른 문자도 방지합니다.

다음 옵션 중 하나를 사용하는 것이 효과적이라는 것을 알았습니다.

SET DEF OFF

또는

SET SCAN OFF

데이터베이스에 대해서는 잘 모르기 때문에 어느 쪽이 다른 쪽보다 나은지, '더 올바른'지 알 수 없습니다.또, 이것보다 더 좋은 것이 있으면 가르쳐 주세요.

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

(테스트되지 않은 상태로 Oracle 박스가 준비되어 있지 않으며 오랜 시간이 경과되었습니다.)

sql plus를 사용하는 경우 명령어를 발행해야 합니다.

SET SCAN OFF

SQL/Plus를 사용하지 마십시오. PL/SQL Developer는 SQL 도구 이상의 기능을 권장합니다.

p.s. 어떤 사람들은 TOD를 선호한다.

이봐, 앤드류:

"J&J 건설":

SELECT CONCAT('J', CONCAT(CHR(38), 'J Construction')) FROM DUAL;

언급URL : https://stackoverflow.com/questions/152837/how-to-insert-a-string-which-contains-an

반응형