2011-08-24 31 views
0

我有一个非常大的iSeries的DB2 V8存储过程,而执行以下操作:相同的架构 检测和使用DB2 V8 CURRENT SCHEMA

  • 准备从字符串动态SQL statments内

    • 调用其他存储过程并运行它们
    • 从同一架构
    • 通话等功能
    • 使用各种表,从相同的模式

    我的问题是这个存储过程和附带的函数可能会从该模式变为另一个(即,从'superlib'到'restorelib'),并且整个代码当前被硬编码为使用命名模式运行。

    我想要的是能够做到以下两点之一:或者通过参数将所有内容所在的架构名称传递给存储过程,或者让存储过程检测架构的名称并使用它运行自己。

    这是我当前的代码示例:

    SELECT COUNT(*) INTO TotalNotDone FROM superlib.PROCESSTABLES WHERE PROCESS_FLAG < 1; 
    WHILE TotalNotDone > 0 DO 
    SET SQLLOOPSTMT = 'select name_to_proces from ' CONCAT SOURCELIBRARY CONCAT '.processtables where process_flag = 0' ; 
    
    PREPARE LOOPSTMT FROM SQLLOOPSTMT ; 
    OPEN LOOPCUR ; 
    FETCH LOOPCUR INTO TABLETOPROCESS ; 
    
    CALL superlib.SP_RESTORE_INSERTS (SOURCELIBRARY , DESTLIBRARY , TABLETOPROCESS, P_STARTTIME) ; 
    
    CLOSE LOOPCUR; 
    SELECT COUNT(*) INTO TotalNotDone FROM superlib.PROCESSTABLES WHERE PROCESS_FLAG < 1; 
    END WHILE ; 
    

    我要的是有写superlib存储过程调用或引用表内我使用的,只是有存储过程认识到它当前生活在模式superlib中。

    我试过SET CURRENT SCHEMA = 'SUPERLIB';SET SCHEMA = 'SUPERLIB';但在调用表时,没有作品。

    SET PATH "QSYS","QSYS2","SYSPROC","SYSIBMADM","PROGUSER1" ; 
    

    SET PATH "QSYS","QSYS2","SYSPROC","SYSIBMADM","SUPERLIB" ; 
    

    但显然无助:

    从创建存储过程时,我也改变了路径。

  • 回答