Хранимая процедура DB2 для загрузки данных в другую базу данных - PullRequest
0 голосов
/ 27 мая 2019

Я создаю хранимую процедуру для загрузки данных из исходной базы данных: MYDB -> целевая база данных: NEWDB.

Я буду загружать данные в таблицы SCHEMA1.EMPLOYEE1, SCHEMA1.EMPLOYEE2, ...

Редактировать 1:

CREATE or replace PROCEDURE SCHEMA1.PROC_LOAD ()
    SPECIFIC PROC_LOAD
    LANGUAGE SQL
BEGIN
    DECLARE v_table varchar(100);--
    DECLARE truncate_stmt varchar(1000);--
    DECLARE load_stmt varchar(1000);--

    for v_table as select rtrim(tabname) as tabname from syscat.tables where tabschema='SCHEMA1' and tabname like '%EMPLOYEE%'
    do  
        -- Truncate the table first
        set truncate_stmt = 'ALTER TABLE SCHEMA1.'||v_table.tabname||' ACTIVATE NOT LOGGED INITIALLY WITH EMPTY TABLE';--
        prepare s1 from truncate_stmt;--
        execute s1;--

        -- Load the data
        set load_stmt = 'LOAD FROM (DATABASE MYDB SELECT * FROM SCHEMA1.'||v_table.tabname||'_HIST) OF CURSOR MESSAGES ON SERVER INSERT INTO SCHEMA1.'||v_table.tabname||' NONRECOVERABLE';--
        CALL SYSPROC.ADMIN_CMD (load_stmt);--
    end for;--
END;

Выше приведен код моей хранимой процедуры db2, я успешно ее создал, но когда я ее вызываю, она возвращает ошибку:

ERROR [24501] [IBM][DB2/NT64] SQL0501N  The cursor specified in a FETCH statement or CLOSE statement is not open or a cursor variable in a cursor scalar function reference is not open.

В целевой базе данных я выбираю данные из SCHEMA1.EMPLOYEE1, и это показывает, что данные загружены успешно, но для EMPLOYEE2,3, ... старые данные все еще там, кажется, что только первая таблица в цикле загружен успешно.

Есть идеи? Также моя платформа db2 - это db2 11.1 на luw. Заранее спасибо.

1 Ответ

0 голосов
/ 27 мая 2019

LOAD фиксирует неявно, поэтому вы должны использовать предложение WITH HOLD оператора FOR , чтобы не закрывать курсор на такой фиксации.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...