Update Function GENERATE_SQL
This commit is contained in:
@@ -1 +1,106 @@
|
||||
牄禗袬蒨@\蚕謨@^@
|
||||
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 ;
|
||||
|
||||
|
||||
Reference in New Issue
Block a user