Tuesday, 9 February 2016

PLSQL - Simple csv file output created for sql query through UTL file command


PLSQL - Simple excel file output created for sql query through UTL file command


/************************************************************************
Name            :   XX01_CONC_ERR_REPORT.sql

Program Type    :   Anonymous PLSQL
                                      
Process Type    :   DML process
Author          :   --
Created On      :   09-FEB-2016
Purpose         :   Create Concurrent error reports in .xls format
                  
Called By       :   Program name
Calls           :   none
Spec Doc        :   none
Tables/views    :   custom table xx01
                
Change History  :  
-----------------------------------------------------------------------
Module                        Modified By      Modified On
Version Number       Modification
-----------------------------------------------------------------------
-----------------------------------------------------------------------
Failure Recovery Strategy 
-----------------------------------------------------------------------
-- select statements only. No recovery strategy needed
-----------------------------------------------------------------------
-----------------------------------------------------------------------
Description of the program
-----------------------------------------------------------------------
 This program will create a .csv report detailing information about
 concurrent program errrors. It will write this report to a file in the
 $XX01_TOP/out directory called "XX01_REPORT.csv".
----------------------------------------------------------------------
-----------------------------------------------------------------------
Notes / Comments
-----------------------------------------------------------------------
--
-----------------------------------------------------------------------*/
--This program must print error ,progress, other information like datafile name,logfile name
--and other debugging information in the concurrent manager log or some other log
SET SERVEROUTPUT ON SIZE 1000000
whenever sqlerror exit 1 rollback
DECLARE

--- passed parameters   
v_startDate       DATE           := trunc(to_date('&1','YYYY/MM/DD HH24:MI:SS'));             
v_endDate         DATE           := trunc(to_date('&2','YYYY/MM/DD HH24:MI:SS'));
v_moduleName      varchar2(10)   := '&3';
v_moduleNameHead      varchar2(10)  :='';
                
v_rFlag           varchar2(3)    := '&4';
v_rFlagHead       varchar2(5)    := '';
         
v_incFalseErrors      varchar2(3)    := '&5';
v_incFalseErrorsHead  varchar2(5)    := '';
v_dataBase        varchar2(10)   := '&6';
v_date            DATE;
v_rCount          NUMBER         := 0;           

--- utl_file paramters
v_buffer          varchar2(32000);
v_colNames        varchar2(400);     
v_fileHandle      utl_file.file_type;
v_fileLocation    varchar2(50) := 'XX01_OUT';
v_fileName        varchar2(50) := 'XX01_AUDIT_REPORT.xls';
v_title           varchar2(100) := 'CONCURRENT ERROR LOGS REPORT';
 
/*
The two cursors behave relatively the same.
The single cursor will fetch data relevenat for the report for a single
module. The all cursor will fetch data for all modules that are in error table.
*/
cursor conc_error_report_all is
SELECT group_id,
         child_request_flag,
    request_id,
    parent_request_id,
    requested_start_date,
    rtrim(ltrim(program_name)) program_name,
          app_short_name,
    actual_start_date,
    actual_completion_date,
    completion_text,
    requested_by,
    status,
    reason,
    impact,
    feedback_by,
    feedback_date,
    reviewed_flag,
    reviewed_by,
    review_date
FROM XX01_ERROR_LOG
WHERE requested_start_date BETWEEN v_startDate AND v_endDate
AND app_short_name = NVL(v_moduleName,app_short_name)
AND reviewed_flag = NVL(v_rFlag,reviewed_flag)
AND false_error_flag = NVL(v_incFalseErrors,false_error_flag)
order by group_id, request_id, parent_request_id,actual_start_date,app_short_name;
-- end of decalration for all_module cursor --
BEGIN
IF (v_moduleName IS NULL)
then
v_moduleNameHead := 'ALL';
else
v_moduleNameHead := v_moduleName;
END IF;
IF (v_rFlag IS NULL)
then
v_rFlagHead := 'ALL';
else
v_rFlagHead := v_rFlag;
END IF;
IF (v_incFalseErrors IS NULL)
then
v_incFalseErrorsHead := 'ALL';
else
v_incFalseErrorsHead := v_incFalseErrors;
END IF;
dbms_output.put_line('Beginning the Concurrent Error Report');
dbms_output.put_line(' ');
-- list all the parameters into log for debugging
dbms_output.put_line('Start Date:  '||v_startDate);
dbms_output.put_line('End Date:  '||v_endDate);
dbms_output.put_line('Module:  '||v_moduleName);
dbms_output.put_line('Reviewed Flag:  '||v_rFlag);
dbms_output.put_line('Include False Errors Flag:  '||v_incFalseErrors);
-- get the sysdate here for the report file
BEGIN
select sysdate 
into v_date
from dual;
END;
-- open file for writing
v_fileHandle := utl_file.fopen(v_fileLocation,v_fileName, 'W');
-- write title and control info ( date, DB name )
utl_file.put_line(v_fileHandle,v_title);
utl_file.put_line(v_fileHandle,'Report Run Date: '||v_date||'           '||
                               'Report Database: '||v_dataBase);
-- write the paramter list to the xls data file
utl_file.put_line(v_fileHandle,'PARAMETER LIST ');
v_buffer := 'START DATE|END DATE|MODULE|REVIEWED BY FLAG|INCLUDE FALSE ERRORS FLAG';
utl_file.put_line(v_fileHandle,v_buffer);
v_buffer := v_startDate||'|'||v_endDate||'|'||v_moduleNameHead||'|'||v_rFlagHead||'|'||v_incFalseErrorsHead;
utl_file.put_line(v_fileHandle,v_buffer);
utl_file.put_line(v_fileHandle,' ');
-- write the column headers to the file
v_colNames := 'GROUP ID|CHILD REQUEST FLAG|REQUEST ID|PARENT REQUEST ID|REQUEST DATE|PROGRAM NAME|MODULE|ACTUAL START DATE|ACTUAL COMPLETION DATE|COMPLETION TEXT|REQUESTED BY|STATUS|REASON|IMPACT|FEEDBACK BY|FEEDBACK DATE|REVIEWED FLAG|REVIEWED BY|REVIEW DATE';
utl_file.put_line(v_fileHandle,v_colNames);
-- begin cursor loop --

FOR conc_error_report_rec IN conc_error_report_all LOOP
 
  v_buffer:= conc_error_report_rec.group_id||'|'||
           conc_error_report_rec.child_request_flag||'|'||
        conc_error_report_rec.request_id||'|'||
        conc_error_report_rec.parent_request_id||'|'||
        conc_error_report_rec.requested_start_date||'|'||
        conc_error_report_rec.program_name||'|'||
        conc_error_report_rec.app_short_name||'|'||
        conc_error_report_rec.actual_start_date||'|'||
        conc_error_report_rec.actual_completion_date||'|'||
        conc_error_report_rec.completion_text||'|'||
        conc_error_report_rec.requested_by||'|'||
        conc_error_report_rec.status||'|'||
        conc_error_report_rec.reason||'|'||
        conc_error_report_rec.impact||'|'||
        conc_error_report_rec.feedback_by||'|'||
        conc_error_report_rec.feedback_date||'|'||
        conc_error_report_rec.reviewed_flag||'|'||
        conc_error_report_rec.reviewed_by||'|'||
        conc_error_report_rec.review_date;
    --dbms_output.put_line(v_buffer);
 utl_file.put_line(v_fileHandle,v_buffer);
       v_rCount :=conc_error_report_all%ROWCOUNT;
END LOOP;
-- check for # of rows in cursor. If 0, then write error message to file to be mailed
dbms_output.put_line('ROW COUNT:  '||v_rCount);
IF(v_rCount = 0)
THEN
utl_file.put_line(v_fileHandle,' ');
utl_file.put_line(v_fileHandle,'NO DATA RETURNED FOR PARAMETER LIST:' );
utl_file.put_line(v_fileHandle,' ');
utl_file.put_line(v_fileHandle,'START DATE: '||v_startDate);
utl_file.put_line(v_fileHandle,'END DATE: '||v_endDate);
utl_file.put_line(v_fileHandle,'MODULE:  '||v_moduleName);
utl_file.put_line(v_fileHandle,'REVIEWED BY FLAG:  '||v_rFlag);
utl_file.put_line(v_fileHandle,'INCLUDE FALSE ERRORS FLAG:  '||v_incFalseErrors);
END IF;
utl_file.fclose(v_fileHandle);
EXCEPTION
    WHEN  utl_file.invalid_mode THEN
    RAISE_APPLICATION_ERROR (-20051, 'Invalid Mode Parameter');
  WHEN utl_file.invalid_path THEN
    RAISE_APPLICATION_ERROR (-20052, 'Invalid File Location');
  WHEN utl_file.invalid_filehandle THEN
    RAISE_APPLICATION_ERROR (-20053, 'Invalid Filehandle');
  WHEN utl_file.invalid_operation THEN
    RAISE_APPLICATION_ERROR (-20054, 'Invalid Operation');
  WHEN utl_file.read_error THEN
    RAISE_APPLICATION_ERROR (-20055, 'Read Error');
  WHEN utl_file.internal_error THEN
    RAISE_APPLICATION_ERROR (-20057, 'Internal Error');
  WHEN utl_file.charsetmismatch THEN
    RAISE_APPLICATION_ERROR (-20058, 'Opened With FOPEN_NCHAR
    But Later I/O Inconsistent');
 WHEN utl_file.file_open THEN
    RAISE_APPLICATION_ERROR (-20059, 'File Already Opened');
 WHEN utl_file.invalid_maxlinesize THEN
    RAISE_APPLICATION_ERROR(-20060,'Line Size Exceeds 32K');
 WHEN utl_file.invalid_filename THEN
    RAISE_APPLICATION_ERROR (-20061, 'Invalid File Name');
 WHEN utl_file.access_denied THEN
    RAISE_APPLICATION_ERROR (-20062, 'File Access Denied By');
 WHEN utl_file.invalid_offset THEN
    RAISE_APPLICATION_ERROR (-20063,'FSEEK Param Less Than 0');
 WHEN others THEN
      dbms_output.put_line(to_char(sqlcode));
   dbms_output.put_line(sqlerrm);
END;
/
exit

 

Friday, 5 February 2016

After report trigger for RDF reports to submit bursting xml program in Oracle R12


After report trigger for RDF reports to submit bursting xml program in Oracle R12

function AfterReport return boolean is
req_id number;
begin
  IF :CS_NUMOFROWS > 0
  THEN
 
    IF nvl(fnd_profile.value_specific(NAME              => 'XX01_ENABLE_BURSTING_EMAIL'
                                     ,user_id           => fnd_global.user_id
                                     ,responsibility_id => fnd_global.resp_id
                                     ,application_id    => fnd_global.resp_appl_id
                                     ,org_id            => fnd_global.org_id
                                     ,server_id         => fnd_global.server_id)
          ,'N') = 'Y' -- - Oracle - modify 'XX01 Concurrent Programs'
    THEN
      req_id := fnd_request.submit_request('XDO',
                       'XDOBURSTREP',
                     '',
                     '',
                     FALSE,
                     'N',:P_CONC_REQUEST_ID,'N',
                     '','','','','','','',
                     '','','','','','','','','','',
                     '','','','','','','','','','',
                     '','','','','','','','','','',
                     '','','','','','','','','','',
                     '','','','','','','','','','',
                     '','','','','','','','','','',
                     '','','','','','','','','','',
                     '','','','','','','','','','',
                     '','','','','','','','','','');
      IF req_id = 0
      THEN
        srw.message(100, 'Failed to submit bursting program');
      END IF;
      --
      BEGIN
        srw.user_exit('FND SRWEXIT');
      EXCEPTION
        WHEN srw.user_exit_failure THEN
          srw.message(1000, 'Failed in After Report trigger');
          RETURN(FALSE);
      END;
      --
    ELSE
      srw.message(1001,'***Profile Option XX01: Enable Report Bursting Email set to "No", Bursting program NOT submitted');
    END IF;
  ELSE
    srw.message(1
               ,'Bursting Program NOT submitted as there is no Output Generated');
  END IF;
  RETURN(TRUE);
end;