&을 포함하는 문자열을 삽입하는 방법
& 문자를 포함한 삽입문은 어떻게 써야 하나요?예를 들어 데이터베이스의 열에 "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
'programing' 카테고리의 다른 글
잘못된 구성 개체입니다.API 스키마와 일치하지 않는 구성 개체를 사용하여 웹 팩이 초기화되었습니다. (0) | 2023.03.17 |
---|---|
리액트 라우터를 통해 설정된 경로에서 Redx Store에 액세스하는 방법 (0) | 2023.03.17 |
봄 부츠에 백합 사투리 어떻게 넣어요? (0) | 2023.03.17 |
AngularJ는 루트 변경 시 보류 중인 $http 요구를 모두 중단합니다. (0) | 2023.03.17 |
각도 있는 프로젝트 아키텍처 (0) | 2023.03.12 |