Обнаружение и использование CURRENT SCHEMA в DB2 v8 - PullRequest
0 голосов
/ 24 августа 2011

У меня очень большая хранимая процедура в iSeries DB2 v8, которая выполняет следующие действия:

  • Вызывает другие хранимые процедуры в той же схеме
  • Готовит динамические SQL-отчеты из строк и запускаетthem
  • Вызывает другие функции из той же схемы
  • Использует различные таблицы из той же схемы

Моя проблема в том, что эта хранимая процедура и сопутствующие функции могут измениться сэта схема в другую (т. е. от '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';, нони один из них не работает при вызове TABLES.

Я также изменил путь при создании хранимой процедуры с:

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

на

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

, но это, очевидно, делаетнет ничего.

1 Ответ

0 голосов
/ 26 августа 2011

Я полагаю, вам нужно установить current path для соединения, которое вызывает хранимый процесс, а не только при его создании.

см. Это: Weblogic: вызвать хранимую процедуру DB2 без имени схемы (свойство currentSchema)

current path документация здесь: http://publib.boulder.ibm.com/infocenter/db2luw/v8//topic/com.ibm.db2.udb.doc/admin/r0005877.htm

...