oracle如何实现外部调用功能

上传人:xiao****1972 文档编号:84085712 上传时间:2019-03-02 格式:DOC 页数:3 大小:29KB
返回 下载 相关 举报
oracle如何实现外部调用功能_第1页
第1页 / 共3页
oracle如何实现外部调用功能_第2页
第2页 / 共3页
oracle如何实现外部调用功能_第3页
第3页 / 共3页
亲,该文档总共3页,全部预览完了,如果喜欢就下载吧!
资源描述

《oracle如何实现外部调用功能》由会员分享,可在线阅读,更多相关《oracle如何实现外部调用功能(3页珍藏版)》请在金锄头文库上搜索。

1、Oracle如何实现外部调用功能 Oralce的外部调用功能很复杂,在这里,我们只需要在存储过程中要调用一个c函数。其大致的流程如下,我们以test.c文件为例,这个c文件的内容大致如下:#includeint lp( char *text )即包含一个lp()函数。我们的目标是在存储过程中调用lp()函数。先把.c文件编译成.o文件gcc c test.c把.o文件编译成共享库文件ld G o test.so test.o通知oracle有关外部的信息 这里有一个问题,在oracle9i以前的版本中,共享库文件在操作系统中的位置是没有关系中的,可以把它放在任意一个目录下,例如可以用下面的语句

2、来创建一个testlib:create library testlib as /tmp/test.so但在9i里,可能考虑到共享库的稳定和安全性问题,这样使用话会报错如下:ORA-28595: Extproc agent : Invalid DLL Path在9i下必须把.so文件放到$ORACLE_HOME/lib目录下,并且设置环境变量EXTPROC_DLLS=$ORACLE_HOME/lib。然后创建testlib:create library testlib as $ORACLE_HOME /test.so执行这一语句需要CREATE LIBRARY系统权限。编写PL/SQL包装程序。

3、使用刚刚创建的ORACLE库,需要创建如下的PL/SQL函数:create or replace FUNCTION lp (lstr in varchar2 )return pls_integerASLANGUAGE CLIBRARY testlibNAME lpPARAMETERS (lstr STRING, return INT );/从PL/SQL调用外部过程。现在,我们可以在存储过程中调用lp()函数了,可以实现该函数原来的功能。示例如下:create or replace procedure add_test( lid in varchar2)asresult PLS_INTEGER

4、;beginresult := lp( hello world );end add_test;/ 正常情况下,你就可以通过上述的过程来在oracle存储过程中来调用一个c函数了。但是,Oracle 实现外部调用功能(external procedure),数据库需要安装intermedia,判断intermedia是否安装,需要通过tnsping 来测试一下是否配置正确。命令运行如下 tnsping extproc_connection_data 或者 tnsping extproc_connection_data.world 如果配置正确,会显示: Attempting to contact

5、 (ADDRESS=(PROTOCOL=IPC)(KEY=EXTPROC) OK(0毫秒) 如果显示服务不存在,需要重新设置listerner.ora和tnsnames.ora 增加后的内容如下: listerner.ora: DZHD = (DESCRIPTION_LIST = (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = JSDZHD)(PORT = 1521) ) (DESCRIPTION = (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC) ) ) SID_LIST_DZHD = (SID_LIS

6、T = (SID_DESC = (GLOBAL_DBNAME = dzhd) (ORACLE_HOME = /oracle/app/oracle/product/9.2.0.4) (SID_NAME = dzhd) ) (SID_DESC = (PROGRAM = extproc) (SID_NAME = PLSExtProc) (ORACLE_HOME = /oracle/app/oracle/product/9.2.0.4) ) ) tnsnames.ora DZHD = (DESCRIPTION_LIST = (DESCRIPTION = (ADDRESS = (PROTOCOL = T

7、CP)(HOST = JSDZHD)(PORT = 1521) ) (DESCRIPTION = (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC) ) ) SID_LIST_DZHD = (SID_LIST = (SID_DESC = (GLOBAL_DBNAME = dzhd) (ORACLE_HOME = /oracle/app/oracle/product/9.2.0.4) (SID_NAME = dzhd) ) (SID_DESC = (PROGRAM = extproc) (SID_NAME = PLSExtProc) (ORACLE_HOME = /oracle/app/oracle/product/9.2.0.4) ) )设置完毕后,需要重新启动listener. Lsnrctl stopLsnrctl start

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 大杂烩/其它

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号