Я создаю хранимую процедуру для загрузки данных из исходной базы данных: 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. Заранее спасибо.