Stored procedures 在DB2V8中检测和使用当前模式
我在iSeries DB2 v8中有一个非常大的存储过程,它执行以下操作:Stored procedures 在DB2V8中检测和使用当前模式,stored-procedures,db2,schema,Stored Procedures,Db2,Schema,我在iSeries DB2 v8中有一个非常大的存储过程,它执行以下操作: 调用同一架构内的其他存储过程 从字符串准备动态sql语句并运行它们 从同一架构调用其他函数 使用同一架构中的不同表 我的问题是,此存储过程和附带的函数可能会从该模式更改为另一个模式(即从“superlib”更改为“restorelib”),并且整个代码当前都是硬编码的,以与命名模式一起运行 我想要的是能够执行以下两种操作之一:要么通过参数将所有内容所在的模式的名称传递给存储过程,要么让存储过程检测模式的名称并使用它自
- 调用同一架构内的其他存储过程
- 从字符串准备动态sql语句并运行它们
- 从同一架构调用其他函数
- 使用同一架构中的不同表
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 ;
到
但这显然没有任何作用。我相信您需要在调用存储过程的连接上设置当前路径,而不仅仅是在创建存储过程时 见此:
当前路径
此处的文档:
SET PATH "QSYS","QSYS2","SYSPROC","SYSIBMADM","PROGUSER1" ;
SET PATH "QSYS","QSYS2","SYSPROC","SYSIBMADM","SUPERLIB" ;