Update Function GENERATE_JSON

This commit is contained in:
2026-02-25 23:00:53 +00:00
parent 06d1c528e6
commit 91c0be46eb

View File

@@ -1 +1,121 @@
@\@^@ SET PATH *LIBL ;
CREATE OR REPLACE FUNCTION CISTOOLS.GENERATE_JSON (
SQLSTMT VARCHAR(32000) ,
CAMELCASELABELS SMALLINT DEFAULT 0 )
RETURNS CLOB(2147483647)
LANGUAGE SQL
SPECIFIC CISTOOLS.GENERATE_JSON
NOT DETERMINISTIC
MODIFIES SQL DATA
CALLED ON NULL INPUT
NO EXTERNAL ACTION
NOT FENCED
CONCURRENT ACCESS RESOLUTION DEFAULT
SET OPTION ALWBLK = *ALLREAD ,
ALWCPYDTA = *OPTIMIZE ,
COMMIT = *NONE ,
DBGVIEW = *SOURCE ,
DECRESULT = (31, 31, 00) ,
DYNDFTCOL = *NO ,
DYNUSRPRF = *OWNER ,
LANGID = ENU ,
OPTLOB = *YES ,
SQLCURRULE = *STD ,
SRTSEQ = *LANGIDSHR
BEGIN
DECLARE COLUMN_LIST CLOB ( 2 M ) DEFAULT ' ' ;
DECLARE JSON_SQL CLOB ( 3 M ) DEFAULT ' ' ;
DECLARE JSON_DATA CLOB ( 2 G ) DEFAULT '' ;
DECLARE ERROR_JSON VARCHAR ( 32000 ) DEFAULT '' ;
DECLARE CONTINUE HANDLER FOR SQLEXCEPTION
BEGIN
DECLARE V_SQLSTATE CHAR ( 5 ) ;
DECLARE V_DB2_RETURN_CODE INT ;
DECLARE V_DB2_MESSAGE_ID CHAR ( 7 ) ;
DECLARE V_ERROR_MESSAGE CLOB ( 2048 ) ;
GET DIAGNOSTICS CONDITION 1
V_DB2_RETURN_CODE = DB2_RETURNED_SQLCODE ,
V_SQLSTATE = RETURNED_SQLSTATE ,
V_ERROR_MESSAGE = MESSAGE_TEXT ,
V_DB2_MESSAGE_ID = DB2_MESSAGE_ID ;
RETURN
JSON_OBJECT (
'success' VALUE 'false' , 'SQLInfo' VALUE JSON_OBJECT (
'SQLState' VALUE V_SQLSTATE ,
'SQLCode' VALUE V_DB2_RETURN_CODE ,
'messageID' VALUE V_DB2_MESSAGE_ID ,
'message' VALUE V_ERROR_MESSAGE ,
'currentTimestamp' VALUE CURRENT_TIMESTAMP ,
'SQLStatement' VALUE CISTOOLS . STRIP_SPACES ( SQLSTMT )
)
) ;
END ;
SET COLUMN_LIST = (
SELECT CAST (
LISTAGG (
'''' ||
CAST (
CASE
CAMELCASELABELS
WHEN
1
THEN
CISTOOLS . GET_CAMEL_CASE (
CASE
WHEN
LOCATE ( '_' , COLUMNNAME ) > 0
THEN TRIM ( COLUMNNAME )
WHEN
COLUMNLABEL IS NOT NULL
AND TRIM ( COLUMNLABEL ) <> ''
THEN TRIM ( COLUMNLABEL )
ELSE TRIM ( COLUMNNAME )
END )
ELSE TRIM ( COLUMNNAME )
END || ''':' ||
CASE
WHEN
COLUMNCCSID = 65535
THEN
'Cast(RTrim(' ||
DELIMIT_NAME ( TRIM ( COLUMNNAME ) )
|| ') As Varchar(' ||
COLUMNLENGTH || ') Ccsid 37)'
WHEN
SQLTYPE IN ( 'SQL_DECIMAL' ,
'SQL_NUMERIC' , 'SQL_INTERGER' ,
'SQL_SMALLINT' , 'SQL_BIGINT' ,
'SQL_DOUBLE' , 'SQL_FLOAT' ,
'SQL_REAL' )
THEN
DELIMIT_NAME ( TRIM ( COLUMNNAME ) ) ||
' Format Json'
ELSE
'RTrim(' ||
DELIMIT_NAME ( TRIM ( COLUMNNAME ) ) ||
')'
END AS CLOB ( 1 M ) ) , ', ' )
WITHIN GROUP ( ORDER BY ORDINALPOS ) AS CLOB ( 2 M ) )
FROM TABLE (
CISTOOLS . GET_DESCRIPTOR ( SQLSTMT )
) ) ;
SET JSON_SQL =
'Values (Select Json_Object(Key ''success'' Value ''true'', '
|| 'Key ''data'' Value ' || 'Json_ArrayAgg(Json_Object(' ||
TRIM ( COLUMN_LIST ) || ') Format Json )) From Table(' ||
SQLSTMT || ')) into ? ' ;
SET CISTOOLS . SQL_STATEMENT = JSON_SQL ; -- global variable sql_statement for
PREPARE JSONSTMT FROM JSON_SQL ;
EXECUTE JSONSTMT USING JSON_DATA ;
RETURN JSON_DATA ;
END ;
GRANT ALTER , EXECUTE
ON SPECIFIC FUNCTION CISTOOLS.GENERATE_JSON
TO AMAPICS WITH GRANT OPTION ;
GRANT EXECUTE
ON SPECIFIC FUNCTION CISTOOLS.GENERATE_JSON
TO PUBLIC ;