db2 просматривает все таблицы, перечисленные в выходных данных sysibm.syscolumns для определенного столбца и определенного значения столбца - PullRequest
1 голос
/ 07 ноября 2019

В DB2 я выполнил запрос:

выберите * из столбцов sysibm.sys a, где a.tbcreator = 'ABCD' И a.name = 'EMP_ID'

В выводе отображаются всетаблицы, содержащие конкретное имя столбца EMP_ID во всей схеме.

Теперь мне нужно отсканировать / просмотреть всю полученную таблицу вывода и проверить наличие специфического EMP_ID значение ввсе имена таблиц, перечисленные в столбце Tbname (в выводе выше).

Другими словами, вытащите все таблицы в схеме, которые могут содержать столбец EMP_ID, равный «1234». Спасибо.

1 Ответ

1 голос
/ 08 ноября 2019

Вы можете выполнить эту задачу, используя составной оператор в Db2.

Ниже приведен минимальный пример в одной транзакции.

Вам необходимо установить терминатор оператора на @ запустить его

CREATE TABLE FIND_VALUE (
    TABSCHEMA  VARCHAR(128) NOT NULL
,   TABNAME    VARCHAR(128) NOT NULL
,   ROW_COUNT  BIGINT       NOT NULL
)
@
BEGIN
    FOR C AS 
        SELECT 'INSERT INTO FIND_VALUE'
            || ' SELECT ''' || TABSCHEMA || ''',''' || TABNAME || ''''
            || ', COUNT(*)' 
            || ' FROM "' ||  TABSCHEMA || '"."' || TABNAME || '"' 
            || ' WHERE "' || COLNAME || '" = 1234' AS S
        FROM 
             SYSCAT.COLUMNS
        JOIN SYSCAT.TABLES  USING ( TABSCHEMA, TABNAME ) 
        WHERE
             TYPE = 'T'
        AND  COLNAME = 'EMP_ID' 
    DO       
        EXECUTE IMMEDIATE C.S;
    END FOR;
END
@
SELECT * FROM FIND_VALUE
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...