我有一个非常大的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" ;
但显然无助:
从创建存储过程时,我也改变了路径。