티스토리 뷰

[ORACLE]SQL*Plus에서 특수문자 INSERT하기 (&)

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
◎ 범례
──────────────────────────────────────────────
   대문자 : Reserved Word (오라클 예약어)
   소문자 : User Define (사용자가 직접 입력해야 하는 부분)
   [ ] : Option (지정하지 않아도 되거나 생략시 기본 설정값으로 대체됨)
   or : Choice(여러가지중 하나를 선택한다)
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━


오라클의 SQL*Plus에서는 Substitution Variable을 이용하여 외부에서 값을 입력 할 수 있도록

하고 있다.

그 Default 문자를 & 로 사용하고 있으며 이 &가 사용되면 SQL*Plus는 사용자에게 해당하는 값을 입력하도록 기다리고 있게 된다.


예를 들어

INSERT INTO TEMPTBL (COL1) VALUES ('YOU&I')를 실행 하게되면 SQL*Plus는

Enter value for i: 와 같은 메시지를 나타내며 값을 입력할때 까지 기다리게 된다.


그러나 실제는 'YOU&I'라는 값이 전체적으로 입력 되어져야 하는것과 같이 특수 문자를 INSERT, UPDATE해야 하는 경우가 발생하게 되고 UPDATE, DELETE등의 WHERE절에도 값에 &등 특수

문자가 있다면 오류 또는 원하지 않는 결과를 얻게 된다.


──────────────────────────────────────────────

이러한 문제를 해결하기 위하여 다음의 3가지 방법이 있을 수 있다.


1. Substitution Variable 기능을 중단시킨 후 INSERT, UPDATE, DELETE한다.

   SET DEFINE OFF 또는 SET SCAN OFF명령을 실행하여 Substitution Variable기능을
   중단 시킨다.
  
   예제)
  
   SQL> set define off
   SQL> INSERT ITO TEMPTBL (COL1) VALUES ('YOU&I');
  
   1 row created.

   SQL> SELECT * FROM TEMPTBL;
  
   COL1
   ---------------
   YOU&I


2. Substitution Variable를 다른 문자로 지정하여 처리한다.

   SET DEFINE을 이용하여 Substitution Variable 문자를 다른 문자로 지정한다.
  
   예제)
  
   SQL> set define #
   SQL> INSERT ITO TEMPTBL (COL1) VALUES ('YOU&I');
  
   1 row created.

   SQL> SELECT * FROM TEMPTBL;
  
   COL1
   ---------------
   YOU&I


3. ESCAPE 문자를 지정하여 특수문자를 특수 기능이 아닌 문자로 인식하도록 한다.

   기본적으로 SQL*Plus는 \(Back Slash) 문자를 ESCAPE문자로 지정되어 있으며
   ESCAPE기능은 OFF로 지정되어 있다.
  
   (SHOW ESCAPE 명령을 이용하여 ESCAPE ON/OFF 상테를 알 수 있다
   SQL> show escape
   escape OFF <---- ESCAPE Mode가 OFF 되어 있다.)
  
   SET ESCAPE ON 명령을 이용하여 ESCAPE문자를 쓸 수 있도록 한다.

   SQL> set escape on
   SQL> show escape
   escape "\" (hex 5c) <---- ESCAPE Mode가 동작중이며 \ 으로 지정되어 있다.
   SQL> INSERT ITO TEMPTBL (COL1) VALUES ('YOU\&I');
  
   1 row created.

   SQL> SELECT * FROM TEMPTBL;
  
   COL1
   ---------------
   YOU&I

댓글
댓글쓰기 폼