Oracle 中调用外部C动态库函数
2016-08-20 05:24:52
原文地址:Oracle 中调用外部C动态库函数 作者:libydwei2007
查找了网上的一些帖子,再结合实际总结这篇文章。希望对大家有所帮助。
参考文章:http://www.cnblogs.com/mathitlin99/archive/2013/09/05/3303717.html
首先编译外部动态库<span "="">libDialPlan.so
点击(此处)折叠或打开
- gcc -fPIC -c LibDialPlan.cpp
- gcc -shared -o libDialPlan.so LibDialPlan.o -lstdc++
修改Oracle TNS文件和监听文件。
不清楚大家直接拷贝是否可用。如果有问题,请注意一下等号以及括号两边的空格。
tnsnames.ora
点击(此处)折叠或打开
- ORADB =
- (DESCRIPTION =
- (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.69.166)(PORT = 1521))
- (CONNECT_DATA =
- (SERVER = DEDICATED)
- (SERVICE_NAME = oradb)
- )
- )
- EXTPROC_CONNECTION_DATA=
- (DESCRIPTION=
- (ADDRESS_LIST=
- (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))
- )
- (CONNECT_DATA=
- (SID = PLSExtProc)
- (PRESENTATION = RO)
- )
- )
listener.ora
点击(此处)折叠或打开
- LISTENER =
- (DESCRIPTION_LIST =
- (DESCRIPTION =
- (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))
- (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.69.166)(PORT = 1521))
- )
- )
- ADR_BASE_LISTENER = /home/oracle/db/app
- SID_LIST_LISTENER =
- (SID_LIST =
- (SID_DESC =
- (GLOBAL_DBNAME = oradb)
- (SID_NAME = oradb)
- )
- (SID_DESC=
- (SID_NAME = PLSExtProc)
- (ORACLE_HOME = /opt/local/oracle/app/product/11.2.0/dbhome_2)
- (ENVS = EXTPROC_DLLS=ANY)
- (PROGRAM = extproc)
- )
- )
修改后重启监听:lsnrctl stop ;lsnrctl start
查看监听状态,应该出现如下的监听项:PLSExtProc<span "="">
点击(此处)折叠或打开
- [root@localhost admin]# lsnrctl status
- LSNRCTL for Linux: Version 11.2.0.1.0 - Production on 04-AUG-2016 19:33:50
- Copyright (c) 1991, 2009, Oracle. All rights reserved.
- Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=IPC)(KEY=EXTPROC1521)))
- STATUS of the LISTENER
- ------------------------
- Alias LISTENER
- Version TNSLSNR for Linux: Version 11.2.0.1.0 - Production
- Start Date 04-AUG-2016 16:23:54
- Uptime 0 days 3 hr. 9 min. 55 sec
- Trace Level off
- Security ON: Local OS Authentication
- SNMP OFF
- Listener Parameter File /opt/local/oracle/app/product/11.2.0/dbhome_2/network/admin/listener.ora
- Listener Log File /opt/local/oracle/app/product/11.2.0/dbhome_2/network/log/listener.log
- Listening Endpoints Summary...
- (DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=EXTPROC1521)))
- (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=192.168.69.166)(PORT=1521)))
- Services Summary...
- Service "PLSExtProc" has 1 instance(s).
- Instance "PLSExtProc", status UNKNOWN, has 1 handler(s) for this service...
- Service "oradb" has 1 instance(s).
- Instance "oradb", status UNKNOWN, has 1 handler(s) for this service...
- The command completed successfully
- [root@localhost admin]#
创建Oracle library 对象
点击(此处)折叠或打开
- create or replace library hytpdtbilldb.Fun_Ext_Proc
- as '/opt/local/Oracle_install/Oracle_Call_External_C/libDialPlan.so';
创建函数
1)按照网上的文章,还有一个parameter的参数。
但是我加入这个参数后一直不能编译通过。去掉后并未影响函数的使用。
2)数字和字符串对应的是binary_integer,varchar2类型。本来C的入参是需要数组类型,但是Oracle没有真正的数组,只能通过字符串代替。
3)在我测试的过程中,偶尔需要重启才能正常调用函数。大家使用的过程中可以留意一下。
点击(此处)折叠或打开
- create or replace function hytpdtbilldb.Air2Gsi
- (x binary_integer,y varchar2)
- return varchar2
- as
- language C
- library hytpdtbilldb.Fun_Ext_Proc
- name "Air2Gsi";
- /
转载于:https://www.cnblogs.com/buffercache/p/11446224.html
Oracle 中调用外部C动态库函数相关推荐
- 如何在Python脚本中调用外部命令(就像在linux shell或Windows命令提示符下输入一样)
如何在Python脚本中调用外部命令(就像在linux shell或Windows命令提示符下输入一样) python标准库中的subprocess可以解决这个问题. from subprocess ...
- CDR插件开发之CPG插件018 - 在CPG插件中调用外部EXE程序并传递参数
在上篇文章中,讲解了CPG插件在VS2019中实现调试的具体方法.本文以具体代码为例,讲解在CPG插件中调用外部EXE程序,并传递运行参数的方法. 工程搭建准备 按照惯例,本篇文章的序号为018,请直 ...
- vue实例中调用外部js_vue中引入外部js方法实例
我们在做vue项目时,经常会需要引入js,常用的有以下几种.本文主要和大家分享vue中引入外部js方法实例,希望能帮助到大家. 第一种import XX from "路径" Vue ...
- 在Delphi中调用外部DLL 之External DLL 导入DLL
调用一个DLL比写一个DLL要容易一些.首先给大家介绍的是静态调用方法,稍后将介绍动态调用方法,并就两种方法做一个比较.同样的,我们先举一个静态调用的例子. unit Unit1;interfaceu ...
- phpcms中调用外部网站数据
1.在phpcms后台模块->模块管理->数据源->外部数据源 中 添加外部数据源 2.在phpcms前台模板中,使用get标签获取数据源中数据.{pc:get sql=" ...
- 在汇编程序中调用C语言的库函数,h转inc
在汇编语言中如果能够调用C语言的库函数,有时会很方便 先给个示例程序: .386 .model flat,stdcall option casemap:none ;Include定义 include ...
- 在Salesforce中调用外部系统所提供的的Web Service
这里需要提供外部service所对应的WSDL文件(Salesforce只支持从本地上传),并且提供的WSDL文件有如下两点要求: 1):wsdl 文件只能有一个binding,Salesforce是 ...
- oracle中调用过程,oracle中如何调用存储过程
oracle中如何调用存储过程 发布时间:2020-03-08 03:28:03 来源:51CTO 阅读:511 作者:lxg290 一.通过pls块来调用存储过程: declare p_dzno v ...
- python init函数可以外部调用么,如何从python类中调用外部函数
我试图收集通过套接字解析的数据.这是我的密码:import pickle import SocketServer class SocketReciever(SocketServer.BaseReque ...
最新文章
- Linux操作系统及平台虚拟化技术漫谈
- .Net Discovery 系列之九--string从入门到精通(勘误版下)
- 基于visual graph开发实时线损管理系统
- Django框架(5.django中模型类建立关系和多表关系查询)
- 复旦高等代数 II(17级)每周一题
- “新基建”横空出世,9本书助你把握7+2大领域风口
- 由两个问题引发的对GaussDB(DWS)负载均衡的思考
- 遍历对象和数组的forEach函数
- CENTOS上编译FreeSwitch
- SpringBoot项目文件下载
- 标题组合-标题组合软件-免费标题生成组合软件
- uppy JavaScript 文件上传
- STM8L052低功耗模式
- javamail 邮件发送、带格式、已保存
- 彻底解决360安全卫士广告问题-终极解决方案(含360后台广告程序下载解决方案)
- 狐狸找兔子 ← C语言实现
- 循序渐进Linux目录
- 在线制作名片php,关于一个名片在线制作的问题,求高手指点阿..
- 4G DTU和4G工业路由器有哪些区别?
- 微信跳一跳python_用python来玩微信跳一跳
热门文章
- mysql容器重启数据是否丢失_docker容器重启 数据会丢吗
- 田忌赛马贪心算法_acm田忌赛马问题在线等急求!!
- vue中this.init用法_Vue中的this.$options.data()和this.$data用法说明
- PyTorch 1.9发布!移动端疯狂更新
- 一图搞定ML!2020版机器学习技术路线图,35页ppt
- 一文带你读懂Self-Supervised Learning(自监督学习)
- 卷王李富贵算法每日一题--分治算法(四)--循环比赛
- NLP系列学习:CRF条件随机场(1)
- 关于文件整理的一些心得
- android属性动画作用范围,Android 属性动画:这是一篇全面 详细的 属性动画 总结攻略...