Stored procedures 在DB2V8中检测和使用当前模式

Stored procedures 在DB2V8中检测和使用当前模式,stored-procedures,db2,schema,Stored Procedures,Db2,Schema,我在iSeries DB2 v8中有一个非常大的存储过程,它执行以下操作: 调用同一架构内的其他存储过程 从字符串准备动态sql语句并运行它们 从同一架构调用其他函数 使用同一架构中的不同表 我的问题是,此存储过程和附带的函数可能会从该模式更改为另一个模式(即从“superlib”更改为“restorelib”),并且整个代码当前都是硬编码的,以与命名模式一起运行 我想要的是能够执行以下两种操作之一:要么通过参数将所有内容所在的模式的名称传递给存储过程,要么让存储过程检测模式的名称并使用它自

我在iSeries DB2 v8中有一个非常大的存储过程,它执行以下操作:

  • 调用同一架构内的其他存储过程
  • 从字符串准备动态sql语句并运行它们
  • 从同一架构调用其他函数
  • 使用同一架构中的不同表
我的问题是,此存储过程和附带的函数可能会从该模式更改为另一个模式(即从“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 ;


但这显然没有任何作用。

我相信您需要在调用存储过程的连接上设置当前路径,而不仅仅是在创建存储过程时

见此:

当前路径
此处的文档:

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