Эта ошибка происходит из-за того, что комплект разработчика IBM для Java не создает связей для своих библиотек в каталоге /usr/lib. Модель защиты для процедур DB2 не разрешает им доступ к библиотекам за пределами стандартных библиотек системы. Чтобы включить в Linux поддержку DECIMAL в Java-процедурах, выполните следующие действия:
Для комплекта разработчика IBM для Java 1.1.8:
ln -sf /usr/jdk118/lib/linux/native_threads/* /usr/lib/
Для комплекта разработчика IBM для Java 1.3:
ln -sf /opt/IBMJava2-13/jre/bin/*.so /usr/lib/
Во избежание ошибок при использовании процедур SQL или хранимых процедур, написанных на встроенном SQL перед использованием рекурсивного оператора CALL закройте все открытые указатели.
Например, предположим, что в хранимой процедуре MYPROC содержится следующий фрагмент программного кода:
OPEN c1; CALL MYPROC(); CLOSE c1;
При вызове MYPROC DB2 возвратит ошибку, поскольку указатель c1 остается открытым, когда MYPROC выполняет рекурсивный оператор CALL. Конкретная ошибка, возвращаемая DB2, зависит от действия, выполняемого MYPROC над указателем.
Для успешного вызова MYPROC перепишите ее так, чтобы она закрывала все открытые указатели до вложенного оператора CALL, как показано в следующем примере:
OPEN c1; CLOSE c1; CALL MYPROC();
Во избежание ошибки закрывайте все открытые указатели перед использованием встроенного оператора CALL.
В следующем абзаце (второй абзац раздела "Writing OLE automation Stored Procedures") пропущено последнее предложение:
Написав код объекта автоматизации OLE, необходимо зарегистрировать методы этого объекта в качестве хранимых процедур при помощи оператора CREATE PROCEDURE. Чтобы зарегистрировать хранимую процедуру автоматизации OLE, используйте оператор CREATE PROCEDURE с условием LANGUAGE OLE. Внешнее имя состоит из ID программы OLE, идентифицирующего этот объект автоматизации OLE, и имени метода, разделенных символом ! (восклицательный знак). Объект автоматизации OLE должен быть реализован как внутрипроцессный сервер (.DLL).