我有一個非常大的iSeries的DB2 V8存儲過程,而執行以下操作:相同的架構 檢測和使用DB2 V8 CURRENT SCHEMA
- 調用其他存儲過程並運行它們 從同一架構
- 通話等功能
- 使用各種表,從相同的模式
我的問題是這個存儲過程和附帶的函數可能會從該模式變爲另一個(即,從'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" ;
但顯然無助:
從創建存儲過程時,我也改變了路徑。