1,写test.c文件,以/opt/test/test.c为例,目录和文件名可以自定义,注意权限问题。
#include <stdio.h>
int add_test(int a,int b)
{
int c = a + b;
return c;
}
2,编译
gcc -shared -fpic -o libtest.so test.c
3,在数据库中执行
(1)连接数据库
dbaccess sysuser -
(2)查询表sysprocedures,生成的包和函数在该表中,提前查下以作对比,如下图所示,该表有633条数据
select * from sysprocedures;
(3)设置oracle模式
set environment sqlmode 'oracle';
(4)声明包
create or replace package dbms_test as function add_test(a int,b int) return int;
end dbms_test;
/
(5)定义包体
create or replace package body dbms_test as function add_test(a int,b int) return int as external name '/opt/test/libtest.so' language c;
end;
/
(6)查询表sysprocedures,和之前的查询作对比,如下图所示,已经插入到表sysprocedures中
select * from sysprocedures;
(7)调用函数验证
execute function dbms_test.add_test(2,5);
如图所示,成功调用了包中的函数。