оператор выбора db2 из имени таблицы, где имя таблицы является переменной - PullRequest
0 голосов
/ 06 ноября 2019

Мне нужно выбрать все количество строк таблицы из базы данных db2.

У меня есть запрос для выбора всей схемы и имени таблицы:

select rtrim(tabschema)||'.'||rtrim(tabname) as tableName from syscat.tables where tabschema = 'COM' order by tabname;

Этот запрос даетСписок имен таблиц базы данных.

Я хотел бы сделать что-то вроде:

select count(*) from tableFromTheFirstQuery

Где tableFromThePreviousQuery замещается tableName моего первого запроса.

Я не могу сделать как

select count(*) from (select rtrim(tabschema)||'.'||rtrim(tabname) as tableName from syscat.tables where tabschema = 'COM' order by tabname);

Я получу только результат подсчета моего первого запроса.

Я не уверен, существует ли способ или нет. В основном мне нужно сохранить все количество строк таблицы в текстовом файле перед выполнением операции DR.

Пожалуйста, сообщите

1 Ответ

0 голосов
/ 08 ноября 2019

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

CREATE TABLE COUNT_ROWS (
    TABSCHEMA  VARCHAR(128) NOT NULL
,   TABNAME    VARCHAR(128) NOT NULL
,   ROW_COUNT   BIGINT
)
@
BEGIN
    FOR C AS cur CURSOR WITH HOLD FOR
        SELECT 'INSERT INTO COUNT_ROWS SELECT ''' || TABSCHEMA || ''',''' || TABNAME || ''', COUNT(*) FROM '
            || '"' ||  TABSCHEMA || '"."' || TABNAME || '"' AS S
        FROM SYSCAT.TABLES
        WHERE TYPE = 'T' AND TABSCHEMA NOT LIKE 'SYS%'
        WITH UR
    DO
          EXECUTE IMMEDIATE C.S;
          COMMIT;
    END FOR;
END
@
SELECT * FROM COUNT_ROWS
@

Обратите внимание, что вам нужно будет использовать @ в качестве ограничителя оператора, чтобы вышеприведенный код запускался

...