Last active
December 28, 2015 03:19
-
-
Save angoca/7434525 to your computer and use it in GitHub Desktop.
How to look up for a object in DB2 and know what kind of object it is. It is called like this: db2 "call LOOK_FOR_OBJECT('NULLID','SQLC2H21')"
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
CREATE OR REPLACE PROCEDURE LOOK_FOR_OBJECT ( | |
IN SCHEM VARCHAR(256), | |
IN NAME VARCHAR(256) | |
) | |
LANGUAGE SQL | |
SPECIFIC PRO_LOOK_FOR_OBJECT | |
DYNAMIC RESULT SETS 1 | |
READS SQL DATA | |
DETERMINISTIC | |
NO EXTERNAL ACTION | |
PARAMETER CCSID UNICODE | |
P_LOOK_FOR: BEGIN | |
DECLARE STMT VARCHAR(10000); | |
DECLARE REF CURSOR | |
WITH RETURN TO CALLER | |
FOR RS; | |
IF (SCHEM IS NULL) THEN | |
SET SCHEM = ''; | |
END IF; | |
SET STMT = 'SELECT ''TABLE'' AS TYPE, ' | |
|| 'VARCHAR(SUBSTR(T.TABSCHEMA, 1, 32), 32) AS SCHEMA, ' | |
|| 'VARCHAR(SUBSTR(T.TABNAME, 1, 32), 32) AS NAME ' | |
|| 'FROM SYSCAT.TABLES T ' | |
|| 'WHERE T.TABSCHEMA LIKE ''%' || SCHEM || '%'' ' | |
|| 'AND T.TABNAME LIKE ''%' || NAME || '%'' ' | |
|| 'UNION ALL ' | |
|| 'SELECT ''FUNCTION'' AS TYPE, ' | |
|| 'VARCHAR(SUBSTR(F.FUNCSCHEMA, 1, 32), 32) AS SCHEMA, ' | |
|| 'VARCHAR(SUBSTR(F.FUNCNAME, 1, 32), 32) AS NAME ' | |
|| 'FROM SYSCAT.FUNCTIONS F ' | |
|| 'WHERE F.FUNCSCHEMA LIKE ''%' || SCHEM || '%'' ' | |
|| 'AND F.FUNCNAME LIKE ''%' || NAME || '%'' ' | |
|| 'UNION ALL ' | |
|| 'SELECT ''INDEX'' AS TYPE, ' | |
|| 'VARCHAR(SUBSTR(I.INDSCHEMA, 1, 32), 32) AS SCHEMA, ' | |
|| 'VARCHAR(SUBSTR(I.INDNAME, 1, 32), 32) AS NAME ' | |
|| 'FROM SYSCAT.INDEXES I ' | |
|| 'WHERE I.INDSCHEMA LIKE ''%' || SCHEM || '%'' ' | |
|| 'AND I.INDNAME LIKE ''%' || NAME || '%'' ' | |
|| 'UNION ALL ' | |
|| 'SELECT ''MODULE'' AS TYPE, ' | |
|| 'VARCHAR(SUBSTR(M.MODULESCHEMA, 1, 32), 32) AS SCHEMA, ' | |
|| 'VARCHAR(SUBSTR(M.MODULENAME, 1, 32), 32) AS NAME ' | |
|| 'FROM SYSCAT.MODULES M ' | |
|| 'WHERE M.MODULESCHEMA LIKE ''%' || SCHEM || '%'' ' | |
|| 'AND M.MODULENAME LIKE ''%' || NAME || '%'' ' | |
|| 'UNION ALL ' | |
|| 'SELECT ''PACKAGE'' AS TYPE, ' | |
|| 'VARCHAR(SUBSTR(P.PKGSCHEMA, 1, 32), 32) AS SCHEMA, ' | |
|| 'VARCHAR(SUBSTR(P.PKGNAME, 1, 32), 32) AS NAME ' | |
|| 'FROM SYSCAT.PACKAGES P ' | |
|| 'WHERE P.PKGSCHEMA LIKE ''%' || SCHEM || '%'' ' | |
|| 'AND P.PKGNAME LIKE ''%' || NAME || '%'' ' | |
|| 'UNION ALL ' | |
|| 'SELECT ''PROCEDURE'' AS TYPE, ' | |
|| 'VARCHAR(SUBSTR(SP.PROCSCHEMA, 1, 32), 32) AS SCHEMA, ' | |
|| 'VARCHAR(SUBSTR(SP.PROCNAME, 1, 32), 32) AS NAME ' | |
|| 'FROM SYSCAT.PROCEDURES SP ' | |
|| 'WHERE SP.PROCSCHEMA LIKE ''%' || SCHEM || '%'' ' | |
|| 'AND SP.PROCNAME LIKE ''%' || NAME || '%'' ' | |
|| 'UNION ALL ' | |
|| 'SELECT ''SEQUENCE'' AS TYPE, ' | |
|| 'VARCHAR(SUBSTR(S.SEQSCHEMA, 1, 32), 32) AS SCHEMA, ' | |
|| 'VARCHAR(SUBSTR(S.SEQNAME, 1, 32), 32) AS NAME ' | |
|| 'FROM SYSCAT.SEQUENCES S ' | |
|| 'WHERE S.SEQSCHEMA LIKE ''%' || SCHEM || '%'' ' | |
|| 'AND S.SEQNAME LIKE ''%' || NAME || '%'' ' | |
; | |
PREPARE RS FROM STMT; | |
OPEN REF; | |
END P_LOOK_FOR@ |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
The following is a bash version of the previous function. This does not need to create an object in the database. It could executed as a script, or in copy / paste directly in the terminal.
You need to pass one or two parameters: The name of the object OR the schema and the name of the object.