Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何从PL/SQL调用C函数_C_Oracle_Plsql - Fatal编程技术网

如何从PL/SQL调用C函数

如何从PL/SQL调用C函数,c,oracle,plsql,C,Oracle,Plsql,我有一个编译的C程序,其中包括多个函数。我想从PL/SQL调用该C程序中的函数。以下是我所做的: 将编译后的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_启动(字符串strHost,int port

我有一个编译的C程序,其中包括多个函数。我想从PL/SQL调用该C程序中的函数。以下是我所做的:

将编译后的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_启动(字符串strHost,int port,bool bVisible)

从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非常陌生。任何提示都会很感激。

选择列表项不能返回布尔数据类型。但是,您可以在PL/SQL块中使用它们。让您的函数返回varchar2,应该可以。类似于“Y”或“N”的内容可以实现。您当然可以按照外部库。假设您正在处理Oracle的最新版本,但是,我认为大多数人会尝试使用
dbms\u调度程序
包的功能来运行外部可执行文件,而不是尽可能使用外部库。当然,您可能仍然希望它成为外部库,但如果您没有研究过可执行作业,那么这可能是一种更简单的方法。
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