Кто-нибудь видел эту ошибку при попытке вызвать внешнюю функцию C из запроса Oracle? Я использую Oracle 10g и получаю эту ошибку каждый раз, когда пытаюсь вызвать одну из двух функций в библиотеке. Вызов другой функции возвращается нормально каждый раз, хотя работающая функция полностью автономна, никаких вызовов для каких-либо функций OCI *.
Вот хранимая процедура, которая используется для вызова ошибочного кода C:
CREATE OR REPLACE PROCEDURE index_procedure(text in clob, tokens in out nocopy clob, location_needed in boolean)
as language c
name "c_index_proc"
library lexer_lib
with context
parameters
(
context,
text,
tokens,
location_needed
);
Любая помощь будет оценена. Все, что я нашел в этом сообщении об ошибке, говорит о том, что нужно предпринять следующее: Обратиться в службу поддержки Oracle.
Edit: я сузил его до такой степени, что я знаю, что глубоко в libclntsh произошел segfault после того, как я вызвал OCILobTrim (чтобы укоротить его до 0 длины) для сгустка токенов. Вот код, который я использовал для вызова этой процедуры.
declare text CLOB; tokens CLOB;
begin
dbms_lob.createtemporary(tokens, TRUE);
dbms_lob.append(tokens, 'token');
dbms_lob.createtemporary(text, TRUE);
dbms_lob.append(text, '<BODY>Test Document</BODY>');
index_procedure(text, tokens, FALSE);
dbms_output.put_line(tokens);
end;
/
Что-то не так с этой настройкой, которая может вызывать проблемы OCILobTrim?