오라클 DB 접속용 Golden32 툴에서 정기 작업 쿼리 변수 지정해서 간편하게 사용하기, 그에따른 특수문자 문제
오라클 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 \&' FROM DUAL;