我在iSeries DB2 v8中有一个非常大的存储过程,它执行以下操作:
我的问题是这个存储过程和附带的函数可能会从该模式变为另一个模式(即从'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 ;
我想要的是 NOT 必须在存储过程中编写superlib
来调用或引用我正在使用的表,只是让存储过程识别它当前正在生存在架构superlib
中。
我已经尝试SET CURRENT SCHEMA = 'SUPERLIB';
和SET SCHEMA = 'SUPERLIB';
,但在调用TABLES时都不起作用。
我在创建存储过程时也改变了路径:
SET PATH "QSYS","QSYS2","SYSPROC","SYSIBMADM","PROGUSER1" ;
到
SET PATH "QSYS","QSYS2","SYSPROC","SYSIBMADM","SUPERLIB" ;
但显然什么也没做。
答案 0 :(得分:0)
我相信您需要在调用存储过程的连接上设置current path
,而不仅仅是在创建它时。
请参阅:Weblogic: Call DB2 stored procedure without schema name (property currentSchema)
current path
文档:http://publib.boulder.ibm.com/infocenter/db2luw/v8//topic/com.ibm.db2.udb.doc/admin/r0005877.htm