Code:
- -- Generate SQL
- -- Version: V7R5M0 220415
- -- Generated on: 01/08/24 11:25:49
- -- Relational Database: MYSYS
- -- Standards Option: Db2 for i
- SET PATH "QSYS","QSYS2","SYSPROC","SYSIBMADM" ;
-
- CREATE FUNCTION SYSTOOLS.GENERATE_SPREADSHEET (
- PATH_NAME DBCLOB(900) CCSID 1200 ,
- SPREADSHEET_QUERY VARCHAR(4000) FOR SBCS DATA DEFAULT NULL ,
- LIBRARY_NAME VARCHAR(10) FOR SBCS DATA DEFAULT NULL ,
- FILE_NAME VARCHAR(10) FOR SBCS DATA DEFAULT NULL ,
- SPREADSHEET_TYPE VARCHAR(4) FOR SBCS DATA DEFAULT 'csv' ,
- COLUMN_HEADINGS VARCHAR(6) FOR SBCS DATA DEFAULT 'NONE' )
- RETURNS INTEGER
- LANGUAGE SQL
- SPECIFIC SYSTOOLS.GENSPREAD
- NOT DETERMINISTIC
- MODIFIES SQL DATA
- CALLED ON NULL INPUT
- NOT FENCED
- SYSTEM_TIME SENSITIVE NO
- SET OPTION ALWBLK = *ALLREAD ,
- ALWCPYDTA = *OPTIMIZE ,
- COMMIT = *NONE ,
- DECRESULT = (31, 31, 00) ,
- DFTRDBCOL = QSYS2 ,
- DLYPRP = *NO ,
- DYNDFTCOL = *NO ,
- DYNUSRPRF = *USER ,
- SRTSEQ = *HEX ,
- USRPRF = *USER
- BEGIN
- DECLARE CMD_TEXT VARCHAR ( 10000 ) FOR SBCS DATA ;
- DECLARE V_HOST_NAME VARCHAR ( 255 ) FOR SBCS DATA ;
- DECLARE CLDOWNLOAD_RESULT INTEGER ;
- DECLARE LOCAL_SQLCODE INTEGER ;
- DECLARE LOCAL_SQLSTATE CHAR ( 5 ) FOR SBCS DATA ;
- DECLARE V_MESSAGE_TEXT VARCHAR ( 2000 ) FOR SBCS DATA ;
- DECLARE V_FAILURE_TEXT VARCHAR ( 2000 ) FOR SBCS DATA ;
- DECLARE EXIT HANDLER FOR SQLEXCEPTION
- BEGIN
- GET DIAGNOSTICS CONDITION 1
- LOCAL_SQLCODE = DB2_RETURNED_SQLCODE , LOCAL_SQLSTATE = RETURNED_SQLSTATE ,
- V_MESSAGE_TEXT = MESSAGE_TEXT ;
- SET V_FAILURE_TEXT = 'GENERATE_SPREADSHEET: FAILED WITH SQLCODE=' CONCAT LOCAL_SQLCODE CONCAT
- ' SQLSTATE=' CONCAT LOCAL_SQLSTATE CONCAT ' MESSAGE=' CONCAT
- V_MESSAGE_TEXT ;
- SIGNAL SQLSTATE LOCAL_SQLSTATE
- SET MESSAGE_TEXT = V_FAILURE_TEXT ;
- RETURN - 1 ;
- END ;
-
- SELECT HOST_NAME INTO V_HOST_NAME
- FROM QSYS2 . SYSTEM_STATUS_INFO_BASIC ;
- IF ( COLUMN_HEADINGS <> 'COLUMN' ) AND ( COLUMN_HEADINGS <> 'LABEL' ) AND
- ( COLUMN_HEADINGS <> 'NONE' ) THEN
- SET V_FAILURE_TEXT = 'GENERATE_SPREADSHEET: COLUMN_HEADINGS: ' CONCAT COLUMN_HEADINGS CONCAT
- ' IS INVALID' ;
- SIGNAL SQLSTATE 'VSP01' SET MESSAGE_TEXT = V_FAILURE_TEXT ;
- END IF ;
- IF ( SPREADSHEET_QUERY IS NULL ) AND ( FILE_NAME IS NULL OR LIBRARY_NAME IS NULL ) THEN
- SET V_FAILURE_TEXT = 'GENERATE_SPREADSHEET: EITHER SPREADSHEET_QUERY OR LIBRARY_NAME AND FILE_NAME MUST BE SPECIFIED' ;
- SIGNAL SQLSTATE 'VSP02' SET MESSAGE_TEXT = V_FAILURE_TEXT ;
- END IF ;
- IF ( SPREADSHEET_TYPE <> 'csv' ) AND ( SPREADSHEET_TYPE <> 'ods' ) AND ( SPREADSHEET_TYPE <> 'xlsx' ) THEN
- SET V_FAILURE_TEXT = 'GENERATE_SPREADSHEET: SPREADSHEET_TYPE:' CONCAT SPREADSHEET_TYPE CONCAT
- ' IS INVALID' ;
- SIGNAL SQLSTATE 'VSP03' SET MESSAGE_TEXT = V_FAILURE_TEXT ;
- END IF ;
- SET CMD_TEXT =
- 'QSYS/STRQSH CMD(''java -Dcom.ibm.iaccess.ActLikeExternal=true -jar /QIBM/proddata/Access/ACS/Base/acsbundle.jar '
- CONCAT '/plugin=cldownload /system=' CONCAT V_HOST_NAME
- CONCAT ' /clientfile=' CONCAT PATH_NAME CONCAT '.' CONCAT SPREADSHEET_TYPE ;
- IF ( SPREADSHEET_QUERY IS NOT NULL ) THEN
- SET CMD_TEXT = CMD_TEXT CONCAT ' /sql="' CONCAT REPLACE ( SPREADSHEET_QUERY , '''' , '''''' ) CONCAT '"' ;
- ELSE
- IF ( QSYS2 . SQL_CHECK_AUTHORITY ( LIBRARY_NAME , FILE_NAME ) = 0 ) THEN
- SET V_FAILURE_TEXT = 'GENERATE_SPREADSHEET: INSUFFICIENT AUTHORITY OR FILE DOES NOT EXIST: ' CONCAT
- LIBRARY_NAME CONCAT '/' CONCAT FILE_NAME ;
- SIGNAL SQLSTATE 'VSP04' SET MESSAGE_TEXT = V_FAILURE_TEXT ;
- END IF ;
- SET CMD_TEXT = CMD_TEXT CONCAT ' /hostfile=' CONCAT LIBRARY_NAME CONCAT '/' CONCAT FILE_NAME ;
- END IF ;
- IF ( COLUMN_HEADINGS = 'COLUMN' ) THEN
- SET CMD_TEXT = CMD_TEXT CONCAT ' /colheadings=1' ;
- ELSE IF ( COLUMN_HEADINGS = 'LABEL' ) THEN
- SET CMD_TEXT = CMD_TEXT CONCAT ' /colheadings=1 /usecollabels' ;
- END IF ;
- END IF ;
- SET CMD_TEXT = CMD_TEXT CONCAT ''')' ;
- CALL SYSTOOLS . LPRINTF ( 'SPEADSHEET COMMAND: ' CONCAT CMD_TEXT ) ;
- CALL QSYS2 . QCMDEXC ( CMD_TEXT ) ;
- WITH LAST_QSH_MSG ( MSGTEXT ) AS (
- SELECT MESSAGE_TEXT FROM TABLE ( QSYS2 . JOBLOG_INFO ( '*' ) )
- WHERE MESSAGE_ID = 'QSH0005'
- ORDER BY ORDINAL_POSITION DESC
- LIMIT 1
- )
- SELECT COUNT ( * ) INTO CLDOWNLOAD_RESULT
- FROM LAST_QSH_MSG
- WHERE MSGTEXT LIKE '%exit status 0.%' ;
- IF ( CLDOWNLOAD_RESULT = 1 ) THEN
- RETURN 1 ;
- ELSE
- SET V_FAILURE_TEXT = 'GENERATE_SPREADSHEET: ACS - cldownload FAILED - CONSULT JOBLOG FOR DETAILS' ;
- SIGNAL SQLSTATE 'VSP05' SET MESSAGE_TEXT = V_FAILURE_TEXT ;
- END IF ;
- END ;
-
- COMMENT ON SPECIFIC FUNCTION SYSTOOLS.GENSPREAD
- IS 'DB2 FOR IBM i SUPPLIED OBJECT VERSION 07500010000' ;
-
- COMMENT ON PARAMETER SPECIFIC FUNCTION SYSTOOLS.GENSPREAD
- ( PATH_NAME IS 'pathname - Default: none' ,
- SPREADSHEET_QUERY IS 'string - Default: NULL' ,
- LIBRARY_NAME IS 'name - Default: NULL' ,
- FILE_NAME IS 'name - Default: NULL' ,
- SPREADSHEET_TYPE IS 'csv, ods, xlsx - Default: csv' ,
- COLUMN_HEADINGS IS 'COLUMN, LABEL, NONE - Default: NONE' ) ;
-
- GRANT EXECUTE
- ON SPECIFIC FUNCTION SYSTOOLS.GENSPREAD
- TO PUBLIC ;
-
- GRANT ALTER , EXECUTE
- ON SPECIFIC FUNCTION SYSTOOLS.GENSPREAD
- TO QSYS WITH GRANT OPTION ;
-
-
|
|