1
2
3
SELECT 'TEST1' AS COL1 FROM dual
UNION ALL --테이블 2개를 합침
SELECT 'TEST2' AS COL1 FROM dual;
1
2
3
SELECT 'TEST1' AS COL1 FROM dual
UNION ALL /* 테이블 2개를 합침 */
SELECT 'TEST2' AS COL1 FROM dual;

'-- 주석문' 의 경우는 한 줄 전체를 주석처리 하는 문법이고 '/* 주석문 */' 은 '/*' 부터 시작해서 '*/'까지를 주석처리하는 범위형 문법입니다. 위 두개의 sql문은 의미상 차이가 전혀 없죠. 하지만 sql을 실행하는 프로그램에 따라서 문제가 발생할 수도 있습니다.

1
SELECT 'TEST1' AS COL1 FROM dual UNION ALL --테이블 2개를 합침 SELECT 'TEST2' AS COL1 FROM dual;
1
SELECT 'TEST1' AS COL1 FROM dual UNION ALL /* 테이블 2개를 합침 */ SELECT 'TEST2' AS COL1 FROM dual;

sql 실행에서 문제가 발생하지는 않았지만, error가 발생해서 log를 찾을 때 sql문을 한줄로 반환해 주는 경우를 봤습니다. 위의 구문처럼 '--주석문'은 한줄이 되어버리니 다음줄까지 전부 주석으로 인식합니다. 쿼리가 길어질수록 알아보기 힘들죠..

1
SELECT 'TEST1' AS COL1 SELECT 'TEST1' AS COL1 FROM dual --테스트

위와 같은 일반적인 쿼리를 실행할때,

1
2
3
SELECT (
SELECT 'TEST1' AS COL1
 FROM dual --테스트 ) SQLT (WHERE 1=1)

내부적으로 위와 같은 쿼리로 변형해서 처리하는 프로그램도 있습니다.

쿼리 중간에 '--주석문'을 사용하면 문제없이 잘 돌아가지만 마지막 라인에 '--주석문'을 사용하면 내부적으로 추가되는 sql구문도 주석으로 인식해 버리게 되어 왜 에러가 발생하는지 찾기 어려운 에러가 발생합니다.

1
2
3
SELECT (
SELECT 'TEST1' AS COL1
 FROM dual /* 테스트 */ ) SQLT (WHERE 1=1)

'/* 주석문 */'을 사용하면 위와 같은 경우에도 원하는 부분만 주석처리되어 에러가 발생하지 않습니다. 위의 두가지 경우를 모두 겪어본 뒤로는 '--주석문'을 기피하고 '/* 주석문 */'의 형식만을 사용하고 있네요.

별 것 아니지만 '--주석문' 대신 '/* 주석문 */'을 사용하는 습관을 가지는 것이 좋겠다는 생각으로 글 남겨봅니다.

 

+ Recent posts