Как избежать схемы жесткого кодирования в хранимых процедурах DB2/400

Я создаю хранимые процедуры, чтобы заменить устаревшие программы приложений для IBM i. Я вызываю хранимую процедуру из веб-приложения Java. Я использую драйвер jt400 JDBC.

Мой URL-адрес JDBC: jdbc:as400://myhost/;libraries=*LIBL,MYLIB;prompt=false

Хранимые процедуры могут вызывать хранимые процедуры

Первоначальный вызов хранимой процедуры завершается нормально, если он не вызывает дальнейших хранимых процедур.

Если хранимая процедура вызывает другие хранимые процедуры, она завершается с ошибкой.

com.ibm.as400.access.AS400JDBCSQLSyntaxErrorException: [SQL0204] MY_SP in MYLIB type *N not found.

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

Я хочу, чтобы вызываемые хранимые процедуры использовали ту же схему, что и вызывающая программа.


person Christopher Smith    schedule 06.09.2018    source источник


Ответы (2)


Вам нужно SET PATH = "MYLIB"

Когда я использую SQuirreL для вызова хранимой процедуры, мне нужно использовать оператор SET PATH, чтобы заставить его найти хранимую процедуру. Я не знаю, связано ли это с плохим списком библиотек или с чем-то еще, но текущая схема не используется для поиска неполной хранимой процедуры.

person jmarkmurphy    schedule 06.09.2018
comment
Это не сильно отличается от жесткого кодирования схемы в операторе Call. Разве в URL-адресе JDBC нет способа установить путь? - person Christopher Smith; 07.09.2018
comment
Кроме того, начальная хранимая процедура работает нормально, пока не делает дополнительных вызовов. - person Christopher Smith; 07.09.2018
comment
Находятся ли хранимые процедуры из дополнительных вызовов в той же библиотеке, что и исходная хранимая процедура? - person jmarkmurphy; 07.09.2018
comment
Да, та же библиотека - person Christopher Smith; 10.09.2018

На самом деле у меня была такая же проблема, хранимая процедура использует список вашей библиотеки описания работы. Вам нужно отредактировать, что вы можете использовать TAATOOL CHGLBLJOBD. Я не перед iSeries в данный момент, но я полагаю, что команда была или EDTJOBDLIB или EDTJOBDLIBL WRKJOBDLIBL. Это некоторая вариация этого.

person GenericDisplayName    schedule 16.07.2019