Update Function SPLIT_COLUMNS

This commit is contained in:
2026-02-25 23:02:20 +00:00
parent 1134c62b9d
commit 86b117ce4b

View File

@@ -1 +1,88 @@
@\@^@
SET PATH *LIBL ;
CREATE OR REPLACE FUNCTION CISTOOLS.SPLIT_COLUMNS (
SQLSTMT VARCHAR(32000) )
RETURNS TABLE (
COLUMN_POSITION INTEGER ,
COLUMN_VALUE VARCHAR(512) )
LANGUAGE SQL
SPECIFIC CISTOOLS.SPLIT_COLUMNS
NOT DETERMINISTIC
READS SQL DATA
CALLED ON NULL INPUT
NO EXTERNAL ACTION
CONCURRENT ACCESS RESOLUTION DEFAULT
SET OPTION ALWBLK = *ALLREAD ,
ALWCPYDTA = *OPTIMIZE ,
COMMIT = *NONE ,
DBGVIEW = *SOURCE ,
DECRESULT = (31, 31, 00) ,
DYNDFTCOL = *NO ,
DYNUSRPRF = *OWNER ,
OPTLOB = *YES ,
SQLCURRULE = *STD ,
SRTSEQ = *HEX
BEGIN
DECLARE STMTHANDLE BIGINT ;
DECLARE DESCHANDLE VARCHAR ( 128 ) ;
DECLARE VORDINALPOS INTEGER DEFAULT 0 ;
DECLARE OVERLAYSQL VARCHAR ( 32000 ) DEFAULT '' ;
DECLARE VCOLUMNNAME VARCHAR ( 128 ) DEFAULT ' ' ;
DECLARE I INTEGER DEFAULT 1 ;
DECLARE TOKEN VARCHAR ( 128 ) DEFAULT ' ' ;
DECLARE RTNSQLCODE INT ;
DECLARE COLCOUNT INTEGER ;
DECLARE VVALUE VARCHAR ( 512 ) DEFAULT '' ;
DECLARE SQLCODE INTEGER DEFAULT 0 ;
DECLARE SQLSTATE CHAR ( 5 ) DEFAULT '00000' ;
DECLARE STMTCURSOR CURSOR FOR STMTHANDLE ;
DECLARE CONTINUE HANDLER FOR SQLSTATE '22501' , SQLSTATE '33000'
BEGIN
DEALLOCATE DESCRIPTOR LOCAL DESCHANDLE ;
GET DIAGNOSTICS CONDITION 1 TOKEN = DB2_ORDINAL_TOKEN_2 ;
SET COLCOUNT = TOKEN ;
ALLOCATE DESCRIPTOR LOCAL DESCHANDLE WITH MAX COLCOUNT ;
DESCRIBE STMTHANDLE USING DESCRIPTOR LOCAL DESCHANDLE ;
SET I = 1 ;
END ;
SET DESCHANDLE = 'Descr' || HEX ( GENERATE_UNIQUE ( ) ) ;
PREPARE STMTHANDLE FROM SQLSTMT ;
ALLOCATE DESCRIPTOR LOCAL DESCHANDLE WITH MAX 1024 ;
DESCRIBE STMTHANDLE USING DESCRIPTOR LOCAL DESCHANDLE ;
GET DESCRIPTOR LOCAL DESCHANDLE COLCOUNT = COUNT ;
--build dynamic varchar sql statement
SET OVERLAYSQL = (
SELECT 'Select ' ||
CAST (
LISTAGG ( 'Cast (C' || RN || ' As Varchar(512) Ccsid 37)' ,
', '
) || ' From Table(Select * From Table(' || SQLSTMT || ' ) X('
|| LISTAGG ( 'C' || RN , ', ' ) || ')) ' AS CLOB ( 2 G ) )
FROM TABLE (
CISTOOLS . ROWS_COUNTER ( COLCOUNT )
) ) ;
DEALLOCATE DESCRIPTOR LOCAL DESCHANDLE ;
PREPARE STMTHANDLE FROM OVERLAYSQL ;
ALLOCATE DESCRIPTOR LOCAL DESCHANDLE WITH MAX COLCOUNT ;
DESCRIBE STMTHANDLE USING DESCRIPTOR LOCAL DESCHANDLE ;
OPEN STMTCURSOR ;
FETCH STMTCURSOR
INTO SQL DESCRIPTOR LOCAL DESCHANDLE ;
WHILE I <= COLCOUNT DO
GET DESCRIPTOR LOCAL DESCHANDLE VALUE I VVALUE = DATA ;
PIPE ( I , VVALUE ) ;
SET I = I + 1 ;
END WHILE ;
DEALLOCATE DESCRIPTOR LOCAL DESCHANDLE ;
CLOSE STMTCURSOR ;
RETURN ;
END ;
GRANT ALTER , EXECUTE
ON SPECIFIC FUNCTION CISTOOLS.SPLIT_COLUMNS
TO AMAPICS WITH GRANT OPTION ;
GRANT EXECUTE
ON SPECIFIC FUNCTION CISTOOLS.SPLIT_COLUMNS
TO PUBLIC ;