2014년 12월 3일 수요일

insert 시 &처리

INSERT INTO test VALUES ('김&동훈', '2004-10-08');
위의 쿼리를 입력 하려고 합니다.
"&" 로 인해 입력이 안됩니다. & 무시하고 입력 방법이 없나여?

INSERT INTO test VALUES ('김\&동훈', '2004-10-08'); => toad 에서는 입력이 됩니다만, sqlplus 이용시 안됩니다.

위와 같은 쿼리를 ss.sql 파일에 저장한후

INSERT INTO test VALUES ('김\&동훈', '2004-10-08');
INSERT INTO test VALUES ('김\&동호', '2004-10-08');
INSERT INTO test VALUES ('나&난나', '2004-09-24');
commit;
exit;


sqlplus aaa/bbb @ss.sql



이 글에 대한 댓글이 총 7건 있습니다.
'&'가 바인딩변수로 사용되기 때문입니다만....

굳이 '&' 문자를 넣으셔야 한다면 '&'를 단문자로 처리하시면 입력은 되더군요.(저도 직접 해보고서야 알았습니다만...)

INSERT INTO TEST VALUES ('김' || '&' || '동훈','2004-10-18');


지나가며님이 2004-12-29 14:32:04에 작성한 댓글입니다. Edit 
답변 감사 합니다.
data 를 이전 하는 과정에서
& 로 인해 data가 이전이 안돼어서 그렇습니다.

김동훈님이 2004-12-29 14:44:16에 작성한 댓글입니다. Edit 

자료이전때문에 그러신다면 SQL Loader를 사용하시면 될텐데요.
SQL Plus를 언급하시는 것으로 뵈서는 다른 툴이 없으신 것 같습니다만, ORACLE에서 제공되는 SQLLDR 명령을 사용하실 수 있습니다.
(사용법은 좀 복잡하긴 합니다만... 필요하시면 메일을 남겨주시면 갈무리해서 날려드리겠습니다)
계속 사용하실 계획이시라면 토드 또는 오렌지 등의 툴을 확보하심이 좋을 듯 하네요.
지나가며님이 2004-12-29 15:04:30에 작성한 댓글입니다. Edit 
메일주소는

토드에서의 기능을 같이 알려 주시면 감사하겠습니다.
김동훈님이 2004-12-29 15:10:01에 작성한 댓글입니다. Edit 
이전은 postgresql -> oracle 로 의 이전입니다.
김동훈님이 2004-12-29 15:12:32에 작성한 댓글입니다. Edit 
혹시 이런것 내용인가여...
Ampersand나 특수 문자를 갖는 데이타를 insert하는 방법

-- 테스트 테이블 생성
SQL>CREATE TABLE test_str(
        val varchar2(10));

 
-- 테이블에 아래와 같이 특수문자를 인서트 할경우
SQL> INSERT INTO test_str VALUES('Q&A');
a의 값을 입력하십시오:
-- 
이런 문장이 나옵니다.. 
-- 
특수문자를 갖는 데이터를 인서트 하기 위해서는 다음과 같은 세 가지 해결 방법이 있습니다.

 
▒ 첫번째 방법

   SQL*Plus에서 
SET DEFINE OFF나 SET SCAN OFF를 실행하여
   
Substitution Variable(&)을 Turn Off시킨다.


   SQL> 
SET DEFINE OFF
   SQL> 
INSERT INTO test_str VALUES('Q&A');
   1 개의 행이 만들어졌습니다.
  
   SQL>SELECT * FROM test_str;
        VAL
        ------
        Q&A


 
▒ 두번째 방법

   SET 
DEFINE ON 상태로 유지 시키면서 Substitution Variable을
   다른 
Non-Alphanumeric 문자나 Non-White Space 문자(*, % 등등)로 대체시킨다.


   SQL> 
SET DEFINE %
   SQL> 
INSERT INTO test_str VALUES('Q&A');
   1 개의 행이 만들어졌습니다.


 
▒ 세번째 방법

   SET ESCAPE ON 상태에서(DEFINE은 &로, SCAN은 ON 상태로 유지)
   
특수 문자 앞에 ESCAPE 문자인 BACKSLASH('\')를 붙인다.


   SQL> 
SET ESCAPE ON
   SQL> 
SHOW ESCAPE
        ESCAPE "\" (hex 5c)
   SQL> 
INSERT INTO test_str VALUES ('Q\&A');
   1 개의 행이 만들어졌습니다.

댓글 없음:

댓글 쓰기