DB2存储过程将数据加载到不同的数据库中

时间:2019-05-27 04:57:11

标签: stored-procedures db2

我正在创建一个存储过程,以从源数据库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平台也是luw上的db2 11.1。预先感谢。

1 个答案:

答案 0 :(得分:0)

LOAD隐式提交,因此您必须使用FOR语句的WITH HOLD子句才能在此类提交时不关闭游标。