sourcecode

Oracle to Excel - PL/SQL 내보내기 절차

copyscript 2023. 10. 26. 21:22
반응형

Oracle to Excel - PL/SQL 내보내기 절차

Oracle에서 Excel로 데이터를 내보내는 pl/sql procedure를 작성하고 있습니다.CSV를 사용할 수 없도록 데이터 포맷이 필요합니다.XML로 이미 시도해 보았지만 열이 50개인 70000개 행(거의 300MB!!!)을 내보내려고 할 때 너무 큰 파일이 생성됩니다.

이것이 바로 HTML 태그를 사용하여 XLS 파일을 생성하기로 결정한 이유입니다. XML보다 크기가 작고 일부 특수 열의 형식만 직접 정의해야 합니다( 문자열, 숫자 및 날짜는 Excel에서 자동으로 형식 지정됨).매우 간단하고 편리하지만 둘 이상의 워크시트를 정의할 수 없습니다.

HTML로 작성한 엑셀 파일에 워크시트를 둘 이상 추가/정의하는 방법을 알고 계십니까? <% ActiveWorkbook>과 같은 VBScript 수식을 사용해 보았습니다.작업 계획표.%>을(를) 추가해도 작동하지 않습니다.

Oracle 서버에서 Excel 또는 HTML 파일을 작성하는 대신 ODBC 또는 OLEDB를 통해 기존 Excel 문서로 Oracle 데이터를 가져올 수 있습니다.단점은 사용자 권한에 주의해야 한다는 것입니다.

https://www.youtube.com/watch?v=Adz0zZFePf8

저도 비슷한 문제를 겪었고 결국 스프레드시트를 조회하고 채워주는 VBA 코드로 스프레드시트를 만들었습니다.제가 맡은 일은 각각 다른 시트에 있는 일련의 테이블을 내보내는 것이었지만, 새 시트로 전환하기 위해 어떤 플래그도 사용할 수 있었습니다.어쨌든 코드를 보고 싶으시면 말씀해주세요.여기 도움이 될만한 덩어리가 있습니다.TableSQL 문자열을 원하는 대로 변경하기만 하면 됩니다.반환되는 각 레코드는 시트에 행으로 삽입됩니다.그런 다음 결정한 플래그에 따라 다음 시트로 이동할 수 있습니다.더 많은 정보가 필요하시면 말씀해주세요(이 예는 고객님이 하고 있는 일이 아니기 때문에).

Private Sub getMyRows(inSchema As String, InTable As String)
    Dim RS As Object
    Dim TableSQL As String
    Dim DataType As String
    Dim DataLength As String
    Dim DataPrecision As String
    Dim DataScale As String
    Dim ColCount As Integer
    Dim WS As Worksheet
' create a sheet with the current table as name
    Worksheets.Add().Name = InTable
    Set RS = CreateObject("ADODB.recordset")
    TableSQL = "Select * from " & inSchema & "." & InTable
' grab the data
    RS.Open TableSQL, conn, adOpenStatic
    For ColCount = 0 To RS.Fields.Count - 1
' set column headings to match table
       ActiveSheet.Cells(1, ColCount + 1).Value = RS.Fields(ColCount).Name
    Next

' copy table data to sheet
     With Worksheets(InTable).Range("A2")
        .CopyFromRecordset RS
    End With
    RS.Close

  End Sub

.xls 형식 기능의 하위 집합을 지원하는 Tom Kyte의 OWA-SILK 유틸리티를 얻을 수 있습니다.

엑셀 문서타입은 훌륭한 해결책입니다.PL/SQL로 완벽하게 기능하는 멀티시트 엑셀 문서를 생성할 수 있습니다.여기에서 확인할 수 있습니다.

http://radio.weblogs.com/0137094/2006/10/26.html

http://radio.weblogs.com/0137094/2009/01/02.html

(제이슨 베넷의 개발자 코너)

PL/SQL만 사용하여 Oracle 데이터베이스에서 Excel 문서를 생성할 수 있는 다른 프로젝트 ORA_EXCEL(www.oraexcel.com )이 있습니다.

SQL plus를 사용하여 웹에서 이 솔루션을 찾았습니다(제가 발명한 것이 아닙니다).

set feed off markup html on spool on
spool c:\table1.xls
select * from table1;
spool off
set markup html off spool off

출처: MSDN. 워크시트를 시스템 DSN에 의존하지 않고 휴대할 수 있도록 하려면 다음과 같은 연결 문자열을 사용하여 연결할 수 있습니다.

Dim cnn As ADODB.Connection
Set cnn = New ADODB.Connection

cnn.ConnectionString = "Provider=OraOLEDB.Oracle.1;Password=<PASSWORD>;Persist Security Info=True;User ID=<USER ID>;Data Source=<DATABASE NAME>"
cnn.Open

... 그럼 몰보이의 솔루션을 사용합니다.

(작은) 엑셀 시트를 html로 엑셀에 저장한 후 그 형식을 재현할 수 있습니다.

SQL*XL이라는 제품이 있는데 엑셀 내에서 SQL 쿼리를 실행할 수 있으며 워크시트 내에 결과가 나타납니다(업데이트도 가능합니다).

무료가 아닌 상업적인 가격이지만, 50유로 정도밖에 되지 않기 때문에 비싸지 않습니다.꽤 많이 써요.

우리는 OOXML 방식을 사용합니다.저희는 처음에 PL/SQL로 진행하기 위한 방법을 작성하고 있었는데 동료가 Excellant라는 제품을 발견했습니다.열 매핑 및 스타일/공식(거의 모든 엑셀 공식이 작동함)이 있는 xml 사양을 전달하면 쿼리가 클롭백을 제공합니다.그래서 더 작게 만들고 싶다면 클롭에서 런지프를 실행할 수 있습니다.제 매니저가 PC카드로 구매한 제품이 꽤 저렴합니다.

웹사이트는 www.peak42solutions.com 입니다.네트워크 사용자가 데이터베이스에 직접 액세스할 수 없기 때문에 ODBC를 사용할 수 없습니다.그리고 우리는 지금 고객들에게 탁월한 인보이스를 이메일로 보내고 있습니다.

감사해요.

청구서

귀사의 문제는 여기 SO의 스레드(Oracle의 UTL_FILE 패키지를 이용한 ExcelSheet 쓰기)와 비슷한 것 같습니다. 최근 이 문제에 대한 간단한 해결책을 찾을 수 있었습니다. 나는 다음의 패키지를 사용했습니다.as_xlsxAnton Scheffer가 만든 (PL/SQL로 Excel-file을 작성) 몇 가지 수정을 통해 루프를 통해 하나의 엑셀 워크북 안에 여러 장을 작성합니다.또한 셀 색상, 글꼴 스타일, 글꼴 크기, 테두리 등과 같은 기본 형식도 지원합니다.예쁩니다. (PL/SQL을 사용하여 Excel 파일(.xlsx)을 만듭니다.)

도움이 되길 바랍니다!

언급URL : https://stackoverflow.com/questions/298648/oracle-to-excel-pl-sql-export-procedure

반응형