[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
댓글을 달아 주세요