1. Напишите и откомпилируйте файл myC.c файл (в зависимости от операционной системы команда может быть разной)
gcc -m64 myC.c — fPIC -G -o myC.so
2. Полученный бинарный файл .so (shared object) расположить в каталог, из которого Oracle мог бы его извлечь, например рядом с другими бинарными библиотеками, которые уже используются
3. Модифицировать listener.ora (возможно еще и tnsnames.ora), добавив путь до библиотеки в EXTPROC_DLLS:
(ENVS=»EXTPROC_DLLS=/path/to/myC.so:/another/lib/ll.so:…»)
4. Перезапустить listener, выполнив команды
lsnrctl stop listener
lsnrctl start listener
5. Проверить статус listener, выполнив команду lsnrctl status listener
6. Создать библиотеку PL SQL под пользователем SYS:
CREATE OR REPLACE LIBRARY MY_LIB_NAME AS ‘/path/to/myC.so’;
7. Создать PL SQL пакет для вызова процедур, функций из внешней библиотеки
CREATE OR REPLACE PACKAGE BODY DS_Package AS FUNCTION DS_Findmin(data CLOB) RETURN PLS_INTEGER IS EXTERNAL NAME "c_findmin" LIBRARY MY_LIB_NAME LANGUAGE C WITH CONTEXT; FUNCTION DS_Findmax(data CLOB) RETURN PLS_INTEGER IS EXTERNAL NAME "c_findmax" LIBRARY MY_LIB_NAME LANGUAGE C WITH CONTEXT; END;
Таким образом можно вызывать си (C) функции из PL SQL