As of Oracle 8i (which I believe is no longer supported) there was no utility to unload data. I guess Oracle felt that once the got the data, there was no reason to relinquesh it. In any case, for myself, and my rusty Oracle, here a sample of code on how to code in PLSQL as well as how to perform an extract. I know it'll be hard from a sql server perspective, but this actually flies.
CREATE OR REPLACE PACKAGE BODY Ben_Extract_Package
AS
-- **********************************************************************
-- *** P R O C E D U R E (Ex_ENR_PARTIC_sp) D E C L A R A T I O N S *****
-- **********************************************************************
PROCEDURE Ex_ENR_PARTIC_sp AS
v_row_count number := 0;
Begin
-- Declare Cursor to extract the ENR_PARTIC table as a 1 Column fixed width 124 bytes
-- called Unload_String
Declare Cursor
CSR_ENR_PARTIC IS
SELECT
RPAD(A.EMPLID,11)
||NVL((RPAD(A.BENEFIT_PROGRAM,3)), ' ')
||NVL((RPAD(A.EVENT_CLASS,3)), ' ')
||NVL((RPAD(A.EVENT_STATUS,1)), ' ')
||NVL((RPAD(A.BAS_PROCESS_STATUS,2)), ' ')
||NVL((TO_CHAR(A.EVENT_DT, 'YYYY-MM-DD')),' ')
||NVL((RPAD(A.ELECT_SUMM,1)), ' ')
||NVL((TO_CHAR(A.ELECT_SUMM_DT, 'YYYY-MM-DD')),' ')
||NVL((RPAD(A.SURVEY_COMPLETE,1)), ' ')
||NVL((TO_CHAR(A.SURVEY_COMPLETE_DT, 'YYYY-MM-DD')),' ')
||NVL((TO_CHAR(A.DATAASOF_DT, 'YYYY-MM-DD')),' ')
||NVL((TO_CHAR(A.DATAIN_DT, 'YYYY-MM-DD')),' ')
||NVL((TO_CHAR(A.DATAOUT_DT, 'YYYY-MM-DD')),' ')
||TO_CHAR(A.LASTUPDDTTM, 'yyyy-mm-dd-hh24.mi.ss')||'.000000'
||NVL((RPAD(A.LASTUPDUSER,15)),' ')
||NVL((RPAD(A.LASTUPDVEH,1)), ' ')
||RPAD(NVL(C.SCHED_ID,' '),6) AS Unload_String
FROM ENR_PARTIC A
,ENR_EMPLOY_DATA B
,ENR_USER_SCRTY C
WHERE A.EMPLID = B.EMPLID
AND B.NATIONAL_ID = C.NATIONAL_ID;
csr_Columns CSR_ENR_PARTIC%ROWTYPE;
Begin
Ben_Extract_Package.O_SqlCode := 0;
Ben_Extract_Package.O_SqlErrM := 'Normal Completion';
Ben_Extract_Package.I_FileName := 'ENR_PARTIC.txt';
Ben_Extract_Package.I_FilePath := 'D:\Benefits\Extracts\';
I_FileType := utl_file.fopen (I_FilePath,I_FileName,'W');
Ben_Extract_Package.O_RowCount := 0;
-- Fetch rows and write records. The Cursor Open, Fetch and Close is dynamic
For csr_Columns IN CSR_ENR_PARTIC
Loop
v_row_count := v_row_count + 1;
utl_file.put_line(Ben_Extract_Package.I_FileType, csr_Columns.Unload_String);
Ben_Extract_Package.O_RowCount := Ben_Extract_Package.O_RowCount + 1;
End Loop;
utl_file.fclose (Ben_Extract_Package.I_FileType);
dbms_output.put_line('ENR_PARTIC EXTRACT COUNT:'||to_char(v_row_count));
EXCEPTION
WHEN utl_file.invalid_path THEN
dbms_output.put_line(' FAILS Extract - Invalid path');
Ben_Extract_Package.O_SqlCode := SqlCode;
Ben_Extract_Package.O_SqlErrM := 'Invalid File Path';
WHEN utl_file.invalid_operation THEN
dbms_output.put_line(' FAILS Extract - Invalid operation');
Ben_Extract_Package.O_SqlCode := SqlCode;
Ben_Extract_Package.O_SqlErrM := 'Invalid Operation';
WHEN utl_file.invalid_mode THEN
dbms_output.put_line(' FAILS Extract - Invalid mode');
Ben_Extract_Package.O_SqlCode := SqlCode;
Ben_Extract_Package.O_SqlErrM := 'Invalid Mode';
WHEN OTHERS THEN
dbms_output.put_line('SqlError:='||SQLERRM||' SQLCODE:='||SQLCODE);
Ben_Extract_Package.O_SqlCode := SqlCode;
Ben_Extract_Package.O_SqlErrM := SqlErrM(SqlCode);
End;
END Ex_ENR_PARTIC_sp;
-- ***************************************************************************
-- *** P R O C E D U R E (Ex_ENR_PARTIC_PLAN_sp) D E C L A R A T I O N S *****
-- ***************************************************************************
PROCEDURE Ex_ENR_PARTIC_PLAN_sp AS
v_row_count number := 0;
Begin
-- Declare Cursor to extract the ENR_PARTIC_PLAN table as fixed width 124 bytes
Declare Cursor
CSR_ENR_PARTIC_PLAN IS
SELECT
RPAD(A.EMPLID,11)
||RPAD(A.PLAN_TYPE,2)
||RPAD(NVL(A.BENEFIT_PROGRAM,' '),3)
||RPAD(NVL(TO_CHAR(A.EVENT_DT, 'YYYY-MM-DD'), ' '),10)
||RPAD(NVL(A.DISPLAY_PLN_SEQ,' '),2)
||RPAD(NVL(A.ELECTION_MADE,' '),1)
||RPAD(NVL(A.PROOF_RCVD,' '),1)
||RPAD(NVL(A.OPTION_CD,' '),3)
||RPAD(NVL(A.ALT_OPTION_CD,' '),3)
||NVL(LPAD(TO_CHAR(A.PCT_GROSS, +990.999),8,0),' 0.000')
||NVL(LPAD(TO_CHAR(A.PCT_GROSS_ATAX, +990.999),8,0),' 0.000')
||NVL(LPAD(TO_CHAR(A.CUR_PCT_GROSS, +990.999),8,0),' 0.000')
||NVL(LPAD(TO_CHAR(A.CUR_PCT_GROSS_ATAX, +990.999),8,0),' 0.000')
||NVL(LPAD(TO_CHAR(A.EMPL_CONTRBUTN_AMT, +99990.99),9,0),' 0.00')
||NVL(LPAD(TO_CHAR(A.ANNUAL_PLEDGE, +99990.99),9,0),' 0.00')
||RPAD(NVL(A.CUR_HLTH_PROVIDER,' '),1)
||RPAD(NVL(A.HLTH_PROVIDER_ID1,' '),30)
||RPAD(NVL(A.HLTH_PROVIDER_ID2,' '),30)
||RPAD(NVL(A.HIGHLY_COMP_EE,' '),1)
||RPAD(NVL((TO_CHAR(A.LASTUPDDTTM, 'yyyy-mm-dd-hh24.mi.ss')||'.000000'),' '),26)
||RPAD(NVL(A.LASTUPDUSER,' '),15)
||RPAD(NVL(A.LASTUPDVEH,' '),1)
||RPAD(NVL(C.SCHED_ID,' '),6) AS Unload_String
FROM ENR_PARTIC_PLAN A
,ENR_EMPLOY_DATA B
,ENR_USER_SCRTY C
WHERE A.EMPLID = B.EMPLID
AND B.NATIONAL_ID = C.NATIONAL_ID;
csr_Columns CSR_ENR_PARTIC_PLAN%ROWTYPE;
Begin
Ben_Extract_Package.O_SqlCode := 0;
Ben_Extract_Package.O_SqlErrM := 'Normal Completion';
Ben_Extract_Package.I_FileName := 'ENR_PARTIC_PLAN.txt';
Ben_Extract_Package.I_FilePath := 'D:\Benefits\Extracts\';
-- Open File
Ben_Extract_Package.I_FileType := utl_file.fopen (Ben_Extract_Package.I_FilePath,Ben_Extract_Package.I_FileName,'w');
Ben_Extract_Package.O_RowCount := 0;
-- Fetch rows and write records. The Cursor Open, Fetch and Close is dynamic
For csr_Columns IN CSR_ENR_PARTIC_PLAN
Loop
v_row_count := v_row_count + 1;
utl_file.put_line(Ben_Extract_Package.I_FileType, csr_Columns.Unload_String);
Ben_Extract_Package.O_RowCount := Ben_Extract_Package.O_RowCount + 1;
End Loop;
utl_file.fclose (Ben_Extract_Package.I_FileType);
dbms_output.put_line('ENR_PARTIC_PLAN EXTRACT COUNT:'||to_char(v_row_count));
EXCEPTION
WHEN utl_file.invalid_path THEN
Ben_Extract_Package.O_SqlCode := SqlCode;
Ben_Extract_Package.O_SqlErrM := 'Invalid File Path';
WHEN utl_file.invalid_operation THEN
Ben_Extract_Package.O_SqlCode := SqlCode;
Ben_Extract_Package.O_SqlErrM := 'Invalid Operation';
WHEN utl_file.invalid_mode THEN
Ben_Extract_Package.O_SqlCode := SqlCode;
Ben_Extract_Package.O_SqlErrM := 'Invalid Mode';
WHEN OTHERS THEN
Ben_Extract_Package.O_SqlCode := SqlCode;
Ben_Extract_Package.O_SqlErrM := SqlErrM(SqlCode);
End;
END Ex_ENR_PARTIC_PLAN_sp;
-- ***************************************************************************
-- *** P R O C E D U R E (Ex_ENR_PARTIC_DPND_sp) D E C L A R A T I O N S *****
-- ***************************************************************************
PROCEDURE Ex_ENR_PARTIC_DPND_sp AS
v_row_count number := 0;
Begin
-- Declare Cursor to extract the ENR_PARTIC_DPND table as fixed width n bytes
Declare Cursor
CSR_ENR_PARTIC_DPND IS
SELECT
RPAD(A.EMPLID,11)
||RPAD(A.PLAN_TYPE,2)
||RPAD(NVL(A.DEPENDENT_BENEF,' '),2)
||RPAD(NVL(A.BENEFIT_PROGRAM,' '),3)
||RPAD(NVL(TO_CHAR(A.EVENT_DT, 'YYYY-MM-DD'), ' '),10)
||RPAD(NVL(A.DISPLAY_PLN_SEQ,' '),2)
||LPAD(TO_CHAR(NVL(A.BENEF_PCT,0)),3,'0')
||RPAD(NVL(A.CONTINGENT,' '),1)
||RPAD(NVL(A.HLTH_PROVIDER_ID1,' '),30)
||RPAD(NVL(A.HLTH_PROVIDER_ID2,' '),30)
||RPAD(NVL(A.CUR_HLTH_PROVIDER,' '),1)
||RPAD(NVL(C.SCHED_ID,' '),6) AS Unload_String
FROM ENR_PARTIC_DPND A
,ENR_EMPLOY_DATA B
,ENR_USER_SCRTY C
WHERE A.EMPLID = B.EMPLID
AND B.NATIONAL_ID = C.NATIONAL_ID;
csr_Columns CSR_ENR_PARTIC_DPND%ROWTYPE;
Begin
Ben_Extract_Package.O_SqlCode := 0;
Ben_Extract_Package.O_SqlErrM := 'Normal Completion';
Ben_Extract_Package.I_FileName := 'ENR_PARTIC_DPND.txt';
Ben_Extract_Package.I_FilePath := 'D:\Benefits\Extracts\';
-- Open File
Ben_Extract_Package.I_FileType := utl_file.fopen (Ben_Extract_Package.I_FilePath,Ben_Extract_Package.I_FileName,'w');
Ben_Extract_Package.O_RowCount := 0;
-- Fetch rows and write records. The Cursor Open, Fetch and Close is dynamic
For csr_Columns IN CSR_ENR_PARTIC_DPND
Loop
v_row_count := v_row_count + 1;
utl_file.put_line(Ben_Extract_Package.I_FileType, csr_Columns.Unload_String);
Ben_Extract_Package.O_RowCount := Ben_Extract_Package.O_RowCount + 1;
End Loop;
utl_file.fclose (Ben_Extract_Package.I_FileType);
dbms_output.put_line('ENR_PARTIC_DPND EXTRACT COUNT:'||to_char(v_row_count));
EXCEPTION
WHEN utl_file.invalid_path THEN
Ben_Extract_Package.O_SqlCode := SqlCode;
Ben_Extract_Package.O_SqlErrM := 'Invalid File Path';
WHEN utl_file.invalid_operation THEN
Ben_Extract_Package.O_SqlCode := SqlCode;
Ben_Extract_Package.O_SqlErrM := 'Invalid Operation';
WHEN utl_file.invalid_mode THEN
Ben_Extract_Package.O_SqlCode := SqlCode;
Ben_Extract_Package.O_SqlErrM := 'Invalid Mode';
WHEN OTHERS THEN
Ben_Extract_Package.O_SqlCode := SqlCode;
Ben_Extract_Package.O_SqlErrM := SqlErrM(SqlCode);
End;
END Ex_ENR_PARTIC_DPND_sp;
-- **************************************************************************
-- *** P R O C E D U R E (Ex_ENR_DPND_BENEF_sp) D E C L A R A T I O N S *****
-- **************************************************************************
PROCEDURE Ex_ENR_DPND_BENEF_sp AS
v_row_count number := 0;
Begin
-- Declare Cursor to extract the ENR_DPND_BENEF table as fixed width n bytes
Declare Cursor
CSR_ENR_DPND_BENEF IS
SELECT
RPAD(A.EMPLID,11)
||RPAD(A.DEPENDENT_BENEF,2)
||RPAD(NVL(A.NAME,' '),50)
||RPAD(NVL(A.SAME_ADDRESS_EMPL,' '),1)
||RPAD(NVL(A.ADDRESS1,' '),35)
||RPAD(NVL(A.ADDRESS2,' '),35)
||RPAD(NVL(A.ADDRESS3,' '),35)
||RPAD(NVL(A.ADDRESS4,' '),35)
||RPAD(NVL(A.CITY,' '),30)
||RPAD(NVL(A.STATE,' '),6)
||RPAD(NVL(A.POSTAL,' '),12)
||RPAD(NVL(A.RELATIONSHIP,' '),2)
||RPAD(NVL(A.DEP_BENEF_TYPE,' '),1)
||RPAD(NVL(A.MAR_STATUS,' '),1)
||RPAD(NVL(TO_CHAR(A.MAR_STATUS_DT, 'YYYY-MM-DD'), ' '),10)
||RPAD(NVL(A.SEX,' '),1)
||RPAD(NVL(TO_CHAR(A.BIRTHDATE, 'YYYY-MM-DD'), ' '),10)
||RPAD(NVL(A.STUDENT,' '),1)
||RPAD(NVL(A.DISABLED,' '),1)
||RPAD(NVL(A.NATIONAL_ID,' '),15)
||RPAD(NVL(A.DPND_CERTIFY,' '),1)
||RPAD(NVL(A.QA_CERTIFY,' '),1)
||RPAD(NVL(A.QA_CERTIFY_DP1,' '),1)
||RPAD(NVL(A.QA_CERTIFY_DP2,' '),1)
||RPAD(NVL(A.QA_CERTIFY_DP3,' '),1)
||RPAD(NVL(A.QA_CERTIFY_DP4,' '),1)
||RPAD(NVL(A.QA_CERTIFY_DP5,' '),1)
||RPAD(NVL(A.QA_CERTIFY_DP6,' '),1)
||RPAD(NVL(A.QA_CERTIFY_DP7,' '),1)
||RPAD(NVL(A.QA_CERTIFY_EF1,' '),1)
||RPAD(NVL(A.QA_CERTIFY_EF2,' '),1)
||RPAD(NVL(A.QA_CERTIFY_EF3,' '),1)
||RPAD(NVL(A.QA_CERTIFY_EF4,' '),1)
||RPAD(NVL(A.QA_CERTIFY_AR1,' '),1)
||RPAD(NVL(A.QA_CERTIFY_AR2,' '),1)
||RPAD(NVL(A.QA_CERTIFY_AR3,' '),1)
||RPAD(NVL(A.QA_CERTIFY_AR4,' '),1)
||RPAD(NVL(A.QA_CERTIFY_AR5,' '),1)
||RPAD(NVL(A.QA_CERTIFY_AR6,' '),1)
||RPAD(NVL(A.QA_CERTIFY_AR7,' '),1)
||RPAD(NVL(A.NEW_RCD,' '),1)
||RPAD(NVL((TO_CHAR(A.LASTUPDDTTM, 'yyyy-mm-dd-hh24.mi.ss')||'.000000'),' '),26)
||RPAD(NVL(A.LASTUPDUSER,' '),15)
||RPAD(NVL(A.LASTUPDVEH,' '),1)
||RPAD(NVL(A.STUDENT_CERTIFY,' '),1) AS Unload_String
FROM ENR_DPND_BENEF A;
csr_Columns CSR_ENR_DPND_BENEF%ROWTYPE;
Begin
Ben_Extract_Package.O_SqlCode := 0;
Ben_Extract_Package.O_SqlErrM := 'Normal Completion';
Ben_Extract_Package.I_FileName := 'ENR_DPND_BENEF.txt';
Ben_Extract_Package.I_FilePath := 'D:\Benefits\Extracts\';
-- Open File
Ben_Extract_Package.I_FileType := utl_file.fopen (Ben_Extract_Package.I_FilePath,Ben_Extract_Package.I_FileName,'w');
Ben_Extract_Package.O_RowCount := 0;
-- Fetch rows and write records. The Cursor Open, Fetch and Close is dynamic
For csr_Columns IN CSR_ENR_DPND_BENEF
Loop
v_row_count := v_row_count + 1;
utl_file.put_line(Ben_Extract_Package.I_FileType, csr_Columns.Unload_String);
Ben_Extract_Package.O_RowCount := Ben_Extract_Package.O_RowCount + 1;
End Loop;
utl_file.fclose (Ben_Extract_Package.I_FileType);
dbms_output.put_line('ENR_DPND_BENEF EXTRACT COUNT:'||to_char(v_row_count));
EXCEPTION
WHEN utl_file.invalid_path THEN
Ben_Extract_Package.O_SqlCode := SqlCode;
Ben_Extract_Package.O_SqlErrM := 'Invalid File Path';
WHEN utl_file.invalid_operation THEN
Ben_Extract_Package.O_SqlCode := SqlCode;
Ben_Extract_Package.O_SqlErrM := 'Invalid Operation';
WHEN utl_file.invalid_mode THEN
Ben_Extract_Package.O_SqlCode := SqlCode;
Ben_Extract_Package.O_SqlErrM := 'Invalid Mode';
WHEN OTHERS THEN
Ben_Extract_Package.O_SqlCode := SqlCode;
Ben_Extract_Package.O_SqlErrM := SqlErrM(SqlCode);
End;
END Ex_ENR_DPND_BENEF_sp;
END Ben_Extract_Package;
/