У меня есть скомпилированная программа на C, которая включает в себя несколько функций. Я хотел бы вызывать функции в этой программе на C из PL / SQL. Вот что я сделал:
Загрузить скомпилированную программу C как библиотеку Oracle (скомпилированная программа на C скопирована в $ ORACLE_HOME / bin /:
create or replace library startoo_lib
as '/apps/oracle/product/19.3/dbhome_1/bin/ooffice.so';
Создайте функцию, вызывающую библиотеку / программу C, функция в программе C определена как bool oo_startup(string strHost, int port, bool bVisible)
create or replace FUNCTION oo_startup(oo_host in varchar2, ooport in number)
return BOOLEAN
as external
library startoo_lib
name "oo_startup"
language c;
Вызов функции из sqlplus:
SQL> select oo_startup(shemp,8110) from dual;
select oo_startup(shemp,8110) from dual
*
ERROR at line 1:
ORA-00904: "SHEMP": invalid identifier
SQL> select oo_startup('shemp',8110) from dual;
select oo_startup('shemp',8110) from dual
*
ERROR at line 1:
ORA-00902: invalid datatype
Я не уверен, что делаю неправильно, и я новичок в PL / SQL. Любые подсказки будут оценены.
Вы, безусловно, можете пойти по пути внешней библиотеки. Предполагая, что вы имеете дело с последней версией Oracle, я думаю, что большинство людей попытаются использовать способность пакета dbms_scheduler
запускать внешние исполняемые файлы oracle-base.com/articles/10g/scheduler-10g, а не использовать внешнюю библиотеку, если это возможно. Конечно, может быть причина, по которой вы действительно хотите, чтобы это была внешняя библиотека, но если вы не смотрели исполняемые задания, это, вероятно, более простой подход.
Элемент списка выбора не может возвращать логический тип данных. Однако вы можете использовать их в блоках PL / SQL. Сделайте так, чтобы ваша функция возвращала varchar2, и все должно быть в порядке. Что-нибудь вроде «Y» или «N» поможет.