프로그래밍

오라클 DB 접속용 Golden32 툴에서 정기 작업 쿼리 변수 지정해서 간편하게 사용하기, 그에따른 특수문자 문제

할랑할랑 2016. 10. 19. 02:19
반응형

오라클 DB 접속용 Golden32 툴에서 정기 작업 쿼리 변수 지정해서 간편하게 사용하기, 그에따른 특수문자 문제

골든32(Golden32)에서 자주 작업 용으로 실행하는 쿼리가 있다면, 변경되는 값 부분만 골든 툴의 변수(variable) 혹은 상수(constant variable)처럼 지정하여 좀 더 간편하게 사용할 수 있다. 쿼리 안에 변수명 앞에 &를 넣고 구문을 작성하면 되며, 변수의 값을 지정해주려면 DEFINE 문을 사용하면 된다.

다만, 골든에서 변수 선언을 위해 사용하는 특수문자가 & 문자라서, 쿼리 구문 중에, 특히 문자열 안에 & 특수문자가 들어간 경우에는 유의해야한다.

예를 들면, SELECT '&TEST' FROM DUAL; 이라는 구문이 의도대로 &TEST라는 결과를 보이게 하려면, 골든32 에서는 쿼리를 이렇게 입력해야한다. 골든에서 & 특수문자 뒤에 연이어서 알파벳이 온다면 해당 단어 전체를 변수명으로 인식해버리기 때문이다.
SELECT '\&TEST' FROM DUAL;


- 두번째 줄에서 보는 것 처럼, DEFINE으로 변수의 값을 지정할때에는 문자열 지정 특수문자가 필요하지 않다. C언어의 #define 구문과 유사하게 동작한다고 보면된다. 사실상 "변수" 기능이 아니라, 매크로 치환(replacement) 기능이라고 보면 된다.
- 골든 자체에서 특수문자 &를 치환용 변수명으로 인식하므로, 제대로 & 문자를 사용하려면 골든에서 쿼리를 작성할때에는 \&라고 입력해야한다.
- DEFINE 구문으로 따로 변수의 값을 지정해주지 않는다면, 쿼리 실행 시점에 변수의 값(치환 값)을 입력하는 창이 따로 뜬다.(before-after 비교 쿼리도 보여줌)
- 두번째 쿼리를 잘 보면, 따옴표 안에 변수명 부분이 따옴표까지 그대로 치환되는 바람에, 쿼리 구문이 엉망이 되어버려, SQL 에러: ORA-00923: FROM 키워드가 필요한 위치에 없습니다. 오류가 발생한다.

매달 혹은 매년 년도나 날짜를 바꿔서 실행해야하는 쿼리가 있다면, 골든에서는 다음과 같이 해주면 된다.

DEFINE yyyymm = '201610'
SELECT &yyyymm FROM DUAL;

Golden32에서 & 특수문자가 포함된 문자열 값을 다루려면, Golden32에서 쿼리를 작성, 실행할 때에는 &를 \&로 바꿔써주어야한다.

SELECT 'SPECIAL CHARACTER TEST \&AMP' FROM DUAL;

반응형