2011-08-24 37 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" ; 
    

    但顯然無助:

    從創建存儲過程時,我也改變了路徑。

  • 回答