일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- perl string
- command & perl
- prompt
- sqlplus
- oracle install
- 연산자
- grid
- 오라클
- Oracle RAC
- Linux
- PERL
- MySQL
- bash
- Network
- dba
- RHEL4
- rac
- solaris
- mariaDB
- SQL
- perl one-liner
- patch
- memory
- solaris network
- php5
- cygwin
- oracle
- Unix
- perl + 정규표현식
- fdisk
- Today
- Total
DATA 전문가로 가는 길
[ Perl ] Pro*C 분석기 - 테이블 추출 방법 본문
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;
'Programming > Perl' 카테고리의 다른 글
[ Perl ] Solaris9 - Perl 업그레이드 방법 (0) | 2010.12.17 |
---|---|
[ Perl ] Perl Oneliners [Pattern, Select, Change] (0) | 2010.11.30 |
[Perl] Perl One-liner 모음 (0) | 2010.02.02 |
[Perl] Perl 자동 화 설정 방법 (0) | 2010.01.13 |
[Perl] 문자열 비교 String Diff [ 파일1을 기준으로 파일2에서 중복 값을 출력 ] (4) | 2009.07.04 |