В данной статье мы рассмотрим процесс настройки внешних процедур (External Procedures) для Oracle Database 18c на операционной системе Windows 10 с использованием DLL, созданных в Delphi.
Проблема пользователя
Пользователь столкнулся с проблемой при настройке функции External Procedures для своей системы Oracle Database 18c, работающей на Windows 10. В документации Oracle указано, что для активации этой функции достаточно настроить переменные окружения в файле extrproc.ora. Однако, при попытке вызвать внешнюю процедуру, пользователь получает ошибку ORA-06520, указывающую на проблему с загрузкой DLL.
Шаги решения проблемы
Настройка переменных окружения
В файле extrproc.ora необходимо установить переменную EXTPROC_DLLS в значение ANY для тестирования:
SET EXTPROC_DLLS=ANY
Создание DLL в Delphi
Пользователь уже создал DLL с помощью Delphi, содержащую функции Sum и Subtract, а также процедуру TEST. Пример кода DLL:
pascal
library testdll;
function Sum(x, y: Integer): Integer; stdcall;
begin
Result := x + y;
end;
// ... (остальные функции и процедуры)
exports
TEST,
Sum,
Subtract;
begin
end.
Важно отметить, что для Windows 64-битной системы используется стандартный вызов по соглашению cdecl, а не stdcall, как указано в коде пользователя. В 64-битной версии Windows Delphi автоматически использует cdecl, поэтому в коде Delphi нет необходимости явно указывать calling convention.
Компиляция DLL
Для совместимости с Oracle 18c и операционной системой, DLL должна быть скомпилирована в соответствующей разрядности (32 или 64 бит). Поскольку Oracle Database 18c для Windows доступен только в 64-битной версии, необходимо компилировать DLL в 64-битной конфигурации.
Настройка библиотеки в базе данных
Создание псевдонима библиотеки в базе данных:
sql
CREATE OR REPLACE LIBRARY MySchema.TESTDLL AS 'C:\testdll.dll';
Опубликование внешней процедуры:
sql
create or replace PROCEDURE TESTPROCEDURE
AS LANGUAGE C
NAME "TEST"
LIBRARY TESTDLL;
Вызов внешней процедуры
Попытка вызова процедуры в PL/SQL:
sql
begin
TESTPROCEDURE();
end;
Проверка конфигурации
Необходимо убедиться, что файл listener.ora и tnsnames.ora настроены корректно.
Отладка
При возникновении ошибок загрузки DLL, можно использовать отладчик для выявления проблемы.
Подтвержденный ответ
Пользователь смог решить проблему, изменив calling convention на cdecl, что соответствует стандарту для 64-битных приложений Windows. После этого, внешняя процедура была успешно вызвана.
Альтернативный ответ
В случае если проблема не решена, стоит проверить следующие моменты:
- Правильность указания пути к DLL в псевдониме библиотеки.
- Соответствие разрядности DLL и разрядности Oracle Database.
- Наличие необходимых разрешений на чтение и выполнение файла DLL.
- Корректность конфигурации файлов listener.ora и tnsnames.ora.
Следуя этим шагам и рекомендациям, можно настроить использование External Procedures в Oracle 18c с помощью DLL, созданных в Delphi для Windows 10.
Пользователь сталкивается с настройкой внешних процедур для Oracle Database 18c на Windows 10, используя DLL, созданные в Delphi, и испытывает проблемы с загрузкой DLL при попытке их вызова.
Комментарии и вопросы
Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS
Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.