Files
SQL/CISTOOLS/Functions/GENERATE_SQL.sql
2026-02-25 23:00:55 +00:00

107 lines
2.8 KiB
MySQL

SET PATH *LIBL ;
CREATE OR REPLACE FUNCTION CISTOOLS.GENERATE_SQL (
INOBJ VARCHAR(256) ,
INLIB VARCHAR(128) DEFAULT '*ALL' ,
INTYP VARCHAR(128) DEFAULT '*ALL' )
RETURNS VARCHAR(32000)
LANGUAGE SQL
SPECIFIC CISTOOLS.GENERATE_SQL
NOT DETERMINISTIC
MODIFIES SQL DATA
CALLED ON NULL INPUT
SET OPTION ALWBLK = *ALLREAD ,
ALWCPYDTA = *OPTIMIZE ,
COMMIT = *NONE ,
DECRESULT = (31, 31, 00) ,
DYNDFTCOL = *NO ,
DYNUSRPRF = *OWNER ,
SRTSEQ = *HEX
BEGIN
DECLARE RS RESULT_SET_LOCATOR VARYING ;
DECLARE NOT_FOUND VARCHAR ( 256 ) ;
DECLARE RETURN_VAL VARCHAR ( 32000 ) ;
DECLARE SPLIT_POS SMALLINT DEFAULT 0 ;
DECLARE LIB , TYP , OBJ VARCHAR ( 128 ) DEFAULT '' ;
DECLARE CONTINUE HANDLER FOR SQLSTATE '01532'
BEGIN
SET RETURN_VAL = NOT_FOUND ;
END ;
SET ( LIB , TYP , OBJ ) = ( UPPER ( INLIB ) , UPPER ( INTYP ) , UPPER ( INOBJ )) ;
SET SPLIT_POS = REGEXP_INSTR ( OBJ , '[.|/]' ) ;
IF SPLIT_POS > 0
AND ( LIB IS NULL
OR TRIM ( LIB ) = ''
OR TRIM ( LIB ) = '*ALL' ) THEN
SET LIB = SUBSTR ( OBJ , 1 , SPLIT_POS - 1 ) ;
SET OBJ = SUBSTR ( OBJ , SPLIT_POS + 1 ) ;
END IF ;
SELECT OBJLONGNAME , OBJLIB , SQL_OBJECT_TYPE
INTO OBJ , LIB , TYP
FROM
TABLE (
SELECT *
FROM TABLE (
VALUES (
CASE LIB
WHEN '*ALL' THEN ''
ELSE LIB
END )
UNION ALL
SELECT SCHEMA_NAME
FROM LIBLIST
UNION ALL
VALUES (
CASE LIB
WHEN '*ALL' THEN LIB
ELSE ''
END )
)
) X ( LIB_NAME )
JOIN TABLE (
QSYS2 . OBJECT_STATISTICS (
LIB_NAME , '*ALL' , NULLIF ( OBJ , '' ) )
)
ON 1 = 1
WHERE SQL_OBJECT_TYPE IS NOT NULL
AND LIB_NAME <> ''
AND SQL_OBJECT_TYPE = COALESCE (
NULLIF ( TYP , '*ALL' ) , SQL_OBJECT_TYPE )
AND OBJ = COALESCE ( OBJLONGNAME , OBJNAME )
LIMIT 1 ;
CALL QSYS2 . GENERATE_SQL ( DATABASE_OBJECT_NAME => OBJ ,
DATABASE_OBJECT_LIBRARY_NAME => LIB , DATABASE_OBJECT_TYPE => TYP ,
CREATE_OR_REPLACE_OPTION => '1' ) ;
ASSOCIATE RESULT SET LOCATOR ( RS ) WITH PROCEDURE GENERATE_SQL ;
ALLOCATE SQL_CUR CURSOR FOR RESULT SET RS ;
SET CISTOOLS . SQL_STATEMENT = NULL ;
SET CISTOOLS . SQL_STATEMENT = (
SELECT TRIM ( LISTAGG ( CAST ( TRIM ( SRCDTA ) AS VARCHAR ( 32000 ) ) ) )
FROM QTEMP . Q_GENSQL
WHERE TRIM ( SRCDTA ) <> ''
AND SRCSEQ > 6 ) ;
IF CISTOOLS . SQL_STATEMENT IS NULL THEN
SET RETURN_VAL = 'Object Not Found' ;
END IF ;
SET RETURN_VAL = CISTOOLS . SQL_STATEMENT ;
CLOSE SQL_CUR ;
RETURN RETURN_VAL ;
END ;
COMMENT ON PARAMETER SPECIFIC FUNCTION CISTOOLS.GENERATE_SQL
( INOBJ IS 'Object Name' ,
INLIB IS 'Library Name' ,
INTYP IS 'SQL Object Type' ) ;
LABEL ON SPECIFIC FUNCTION CISTOOLS.GENERATE_SQL
IS 'Generate SQL From Object' ;
GRANT ALTER , EXECUTE
ON SPECIFIC FUNCTION CISTOOLS.GENERATE_SQL
TO AMAPICS WITH GRANT OPTION ;
GRANT EXECUTE
ON SPECIFIC FUNCTION CISTOOLS.GENERATE_SQL
TO PUBLIC ;