From 86b117ce4bc066d19a2952c742d4d1551a20a201 Mon Sep 17 00:00:00 2001 From: Alex Zaw Date: Wed, 25 Feb 2026 23:02:20 +0000 Subject: [PATCH] Update Function SPLIT_COLUMNS --- CISTOOLS/Functions/SPLIT_COLUMNS.sql | 89 +++++++++++++++++++++++++++- 1 file changed, 88 insertions(+), 1 deletion(-) diff --git a/CISTOOLS/Functions/SPLIT_COLUMNS.sql b/CISTOOLS/Functions/SPLIT_COLUMNS.sql index 5b704f4..5024f8d 100644 --- a/CISTOOLS/Functions/SPLIT_COLUMNS.sql +++ b/CISTOOLS/Functions/SPLIT_COLUMNS.sql @@ -1 +1,88 @@ -@@\@^@ % %@@@@Km@M@ %@M]@]@ %@@M@ %m@@k@ %m@M]@]@@@ %@@ %@Km@ %@@ %@@@ %@@@@ %@@@ %@@@@ %@@@@~@\@k@ %@~@\@k@ %@~@\@k@ %@~@\@k@ %@~@Mk@k@]@k@ %@~@\@k@ %@~@\@k@ %@~@\@k@ %@~@\@k@ %@~@\@@@ %@ %@@@^@ %@@@M@@]@^@ %@@@@@^@ %@@@M@@]@@}}@^@ %@@@M@@]@@}@}@^@ %@@@@@^@ %@@@M@@]@@}@}@^@ %@@@^@ %@@@^@ %@@@M@@]@@}}@^@ %@@@@@^@ %@@@M@@]@@}}@^@ %@@@@@^@ %@@@@@}}@k@@}}@ %@ %@@@@^@ %@@@@@~@mmm@^@ %@@~@@^@ %@@@@@@@^@ %@@@@@@^@ %@@~@@^@ %@^@ %@@~@}ą}@OO@@M@m@M@]@]@^@ %@@@@^@ %@@@@@@@^@ %@@@@@@^@ %@@@@@~@@^@ %``@@@@@ %@@~@M@ %@}⅓@}@OO@ %@M@ %@M@}Á@M}@OO@@OO@}@@偙M]@Ã@]}@k@ %}k@}@ %]@OO@}@ƙ@あM⅓@\@ƙ@あM}@OO@@OO@}@]@M}@ %OO@@M@}}@OO@@k@}k@}@]@OO@}]]@}@@@M@@@]@]@ %@@M@ %@K@m@M@@]@ %]@]@^@ %@@@@^@ %@@@@^@ %@@@@@@@^@ %@@@@@@^@ %@@^@ %@@ %@@@@@^@ %@@L~@@@ %@@@@@@@~@@^@ %@M@@k@@]@^@ %@@~@@N@@^@ %@@^@ %@@@@^@ %@@^@ %@^@ %@@^@ % %@@k@@@@ %@@@Km@ %@@@@@^@ % %@@@@ %@@ \ No newline at end of file +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 ; +