DATA 전문가로 가는 길

[ Perl ] Pro*C 분석기 - 테이블 추출 방법 본문

Programming/Perl

[ Perl ] Pro*C 분석기 - 테이블 추출 방법

EstenPark 2013. 5. 24. 08:42

Pro*c, SQL, C, JAVA에서 쿼리가 존재한다면 해당 테이블만 추출할 수 있는 명령어이다.


1. 주석은 제외한다.

2. 조회(SELECT)부분만 추출한다.

3. 데이터를 조작(DML)부분만 추출한다.

4. 소스안에 프로시저가 있을 경우 해당 프로시저를 추출한다.


기본적으로 4개를 원칙으로 명령어를 만들었다.

회사에 유능한 대리님이 계셔서 도움을 받았다.


아쉬운 점은 각각 개발자 마다 SQL 포메팅이 달라서 모든 쿼리에 만족할 수 없다.


개인적으로는 아래와 같은 포메팅을 추천한다.


SELECT   *

FROM      FAN_ACCOUNT A

              ,FAN_DATA B

WHERE     A.ACC_ID = B.ACC_ID

;


명령어 


# 테이블 명명규칙 (예 : FAN_ )

# 프로시저 명명규칙(예: USP_ )


# SELECT절에 사용된 테이블을 추출한다.

cat file_name | sed -e "s:--.\{0,\}$::g;s:\*\/:\*\/\^:g" | \

sed "s:\/\*[^\^]\{0,\}\*\/\^::g" | \

sed "/\/\*/,/\*\/\^/s:^[^\^]\{0,\}[^$]::g" |  \

perl -ne 'print if /(SELECT)/i../\;/i' | \

perl -ane  'printf"%s\n", uc($1) if /(F[A-Z]{2}_\w{2,})/ig'  \

|sort -u 

;


# DML절에 사용된 테이블을 추출한다.

cat file_name| \

sed -e "s:--.\{0,\}$::g;s:\*\/:\*\/\^:g" | \

sed "s:\/\*[^\^]\{0,\}\*\/\^::g" | \

sed "/\/\*/,/\*\/\^/s:^[^\^]\{0,\}[^$]::g" | \

perl -ne 'print if /(UPDATE|MERGE|DELETE|TRUNCATE)/i../\;/i' | \

perl -ane  'printf"%s\n", uc($1) if /(F[A-Z]{2}_\w{2,})/ig' | \ 

sort -u


# 프로시저를 추출한다.

cat file_name | perl -ne 'printf"%s\n", uc($1) if /(USP_.+)(\(.+)/ig' |sort -u;


Comments