반응형
여러가지 방법이 있겠지만
엑셀에서 HTML 문서를 읽을 수 있다는 점에 착안해서 구현한 방법입니다.
HTML로 테이블을 하나 만들어서 출력해버리면 엑셀에서 그대로 뿌려주는게 가능합니다.
1. HTML 헤더부 생성
2. 본문에 테이블 및 데이터 출력
3. HTML 푸터부 생성
4. spool할때 spool 파일의 확장자를 xls로 출력
PS. 데이터 항목에 엑셀 함수를 뿌리면 엑셀에서 불러왔을때 해당 함수가 수행됩니다.
• UTL_FILE.PUT_LINE(v_FileHandle, '<html>');
• UTL_FILE.PUT_LINE(v_FileHandle, '<head>');
• UTL_FILE.PUT_LINE(v_FileHandle, '<meta http-equiv="Content-Type" content="text/html; charset=EUC-KR">');
• UTL_FILE.PUT_LINE(v_FileHandle, '<meta name="generator" content="SQL*Plus 10.2.0">');
• UTL_FILE.PUT_LINE(v_FileHandle, '<style type=''text/css''> body {font:10pt Arial,Helvetica,sans-serif; color:black; background:White;} p {font:10pt Arial,Helvetica,sans-serif; color:black; background:White;} table,tr,td {font:10pt Arial,Helvetica,sans-serif; color:Black; background:#f7f7e7; padding:0px 0px 0px 0px; margin:0px 0px 0px 0px;} th {font:bold 10pt Arial,Helvetica,sans-serif; color:#336699; background:#cccc99; padding:0px 0px 0px 0px;} h1 {font:16pt Arial,Helvetica,Geneva,sans-serif; color:#336699; background-color:White; border-bottom:1px solid #cccc99; margin-top:0pt; margin-bottom:0pt; padding:0px 0px 0px 0px;} h2 {font:bold 10pt Arial,Helvetica,Geneva,sans-serif; color:#336699; background-color:White; margin-top:4pt; margin-bottom:0pt;} a {font:9pt Arial,Helvetica,sans-serif; color:#663300; background:#ffffff; margin-top:0pt; margin-bottom:0pt; vertical-align:top;}</style><title>SQL*Plus Report</title>');
• UTL_FILE.PUT_LINE(v_FileHandle, '</head>');
• UTL_FILE.PUT_LINE(v_FileHandle, '<body>');
• UTL_FILE.PUT_LINE(v_FileHandle, '<p>');
• UTL_FILE.PUT_LINE(v_FileHandle, '<table border=''1'' width=''90%'' align=''center'' summary=''Script output''>');
<위와 같이 HTML 헤더부를 생성>
• FOR data_rec IN GET_DATA_01 LOOP
• UTL_FILE.PUT_LINE(v_FileHandle, '<tr>');
• UTL_FILE.PUT_LINE(v_FileHandle, '<td>');
• UTL_FILE.PUT_LINE(v_FileHandle,data_rec.TX_DATE);
• UTL_FILE.PUT_LINE(v_FileHandle, '</td>');
• UTL_FILE.PUT_LINE(v_FileHandle, '<td align="right">');
• UTL_FILE.PUT_LINE(v_FileHandle,data_rec.TOT);
• UTL_FILE.PUT_LINE(v_FileHandle, '</td>');
• UTL_FILE.PUT_LINE(v_FileHandle, '<td align="right">');
• UTL_FILE.PUT_LINE(v_FileHandle,data_rec.CARD);
• UTL_FILE.PUT_LINE(v_FileHandle, '</td>');
• UTL_FILE.PUT_LINE(v_FileHandle, '<td align="right">');
• UTL_FILE.PUT_LINE(v_FileHandle,data_rec.CAPI);
• UTL_FILE.PUT_LINE(v_FileHandle, '</td>');
• UTL_FILE.PUT_LINE(v_FileHandle, '<td align="right">');
• UTL_FILE.PUT_LINE(v_FileHandle,data_rec.DUP);
• UTL_FILE.PUT_LINE(v_FileHandle, '</td>');
• UTL_FILE.PUT_LINE(v_FileHandle, '<td align="right">');
• UTL_FILE.PUT_LINE(v_FileHandle,data_rec.NODATA);
• UTL_FILE.PUT_LINE(v_FileHandle, '</td>');
• UTL_FILE.PUT_LINE(v_FileHandle, '<td align="right">');
• UTL_FILE.PUT_LINE(v_FileHandle,data_rec.YESDATA);
• UTL_FILE.PUT_LINE(v_FileHandle, '</td>');
• UTL_FILE.PUT_LINE(v_FileHandle, '<td align="right">');
• UTL_FILE.PUT_LINE(v_FileHandle,data_rec.CORRATE);
• UTL_FILE.PUT_LINE(v_FileHandle, '</td>');
• UTL_FILE.PUT_LINE(v_FileHandle, '<td align="right">');
•v_Rows := v_Rows + 1;
• END LOOP;
<커서를 사용한 데이터 출력부>
• UTL_FILE.PUT_LINE(v_FileHandle, '</table>');
• UTL_FILE.PUT_LINE(v_FileHandle, '<p>');
• UTL_FILE.PUT_LINE(v_FileHandle, '</body>');
• UTL_FILE.PUT_LINE(v_FileHandle, '</html>');
<HTML 문서의 푸터부를 구현>
[출처] 프로시저에서 엑셀파일 출력하기 (ProDBA) |작성자 만인불락
반응형
'Database > ORACLE' 카테고리의 다른 글
오라클 기본 유저 정보 (0) | 2010.06.30 |
---|---|
오라클 일괄 컴파일 (0) | 2010.06.30 |
DB에 Connect 할수 없을 때의 진단 - Case Study(Library Cache Latch Contention) (0) | 2010.03.26 |
Oradebug 사용법 (0) | 2010.03.26 |
ErrorStack 덤프를 이용해 문제 SQL 찾아내기 (0) | 2010.03.26 |