惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

量子位
博客园_首页
罗磊的独立博客
云风的 BLOG
云风的 BLOG
J
Java Code Geeks
Last Week in AI
Last Week in AI
D
DataBreaches.Net
Jina AI
Jina AI
博客园 - Franky
大猫的无限游戏
大猫的无限游戏
Apple Machine Learning Research
Apple Machine Learning Research
V
V2EX
D
Docker
MongoDB | Blog
MongoDB | Blog
B
Blog RSS Feed
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
宝玉的分享
宝玉的分享
Engineering at Meta
Engineering at Meta
The Cloudflare Blog
博客园 - 三生石上(FineUI控件)
有赞技术团队
有赞技术团队
人人都是产品经理
人人都是产品经理
H
Help Net Security
T
The Blog of Author Tim Ferriss

博客园 - 雪山之巅

[原创][代码]类似IE设置代理服务器那样的数据快速批量操作业务的实现 [原创]Tree控件的异步加载方案的选择建议(C#,ASP.NET 2.0) [原创]大量数据导出为Excel文件的问题解决(C#,ASP.NET) [转载整理]一本java书的序言——开发历程思绪随笔 在.NET中发送邮件,使用回执功能中遇到问题的解决方法[在NOTES服务器上,C#,.NET2.0环境] powerdesigner中生成数据库脚本时出现长度限制问题的解决方法 - 雪山之巅 - 博客园 VS2005无法调试,绑定句柄无效问题的解决方法 部署Excel相关的应用程序过程中遇到“检索COM类工厂中CLSID...”的两个错误的解决方法 [原创][开源]整合梅花雨日历控件,推出.NET版本 [原创]Oracle数据库性能优化的方案[有删节] 两个读取数据库VIew的定义的SQL语句的写法[Oracle /SQL SERVER] [SQL使用经验]选用 IN 还是 EXISTS,哪个性能更好 [笔记]4.软件规模和开发的关系 [笔记]3.软件代码中的BUG问题的一些记录 [笔记]2.软件质量的一些统计数据 [笔记]1.软件的质量特性characteristics of software quality 一个简单的UrlRewrite示例[演示用,写给同事看的,VS2003环境] Oracle中隐式游标和显式游标的教训[同事的经历] VS2003中自定义控件的智能提示解决方案备忘
[转]数据库存储过程中利用extproc调用共享程序库/动态链接库...
雪山之巅 · 2007-02-09 · via 博客园 - 雪山之巅

1 数据库程序库
主要介绍使用ORACLE数据库的LIBRARY功能访问操作系统的共享程序库或动态链接库(DLL)
1.1 环境设置
l 检查extproc程序是否安装正确,在操作系统下,运行:
$  $ORACLE_HOME/bin//extproc
若显示结果为以下字样,则表示安装正确
Oracle Corporation --- WEDNESDAY JAN 24 2007 14:58:30.598
Heterogeneous Agent Release 10.1.0.4.0 – Production
l 检查环境变量是否设置正确:
$  echo $LD_LIBRARY_PATH
结果应该为:
$ORACLE_HOME/lib:/usr/lib:$ORACLE_HOME/ctx/lib
如果不是,则需要在数据库德操作系统用户的配置文件中设置
LD_LIBRARY_PATH=$ORACLE_HOME/lib:/usr/lib:$ORACLE_HOME/ctx/lib
export LD_LIBRARY_PATH

1.2 数据库设置
数据库的缺省设置中一般都已经存在,若没有,请增加相关部分的内容
1.2.1 listener.ora文件设置
确认extproc的相关设置已经存在该文件中,没有则增加。
SID_LIST_LISTENER =
  (SID_LIST =
    (SID_DESC =
      (GLOBAL_DBNAME = cmstest)
      (ORACLE_HOME = /u01/app/oracle/product/10.1.0/Db_1)
      (SID_NAME = cmstest)
    )
    (SID_DESC =
      (SID_NAME = PLSExtProc)
      (ORACLE_HOME = /u01/app/oracle/product/10.1.0/Db_1)
      (PROGRAM = extproc)
    )
  )

LISTENER =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = 10.30.2.21)(PORT = 1521))
    (ADDRESS= (PROTOCOL= IPC)(KEY= EXTPROCTEST))
  )
修改该文件后,需要重新启动监听程序:
$ORACLE_HOME/bin/lsnrctl stop
$ORACLE_HOME/bin/lsnrctl start
1.2.2 tnsnames.ora文件设置
如果没有extproc_connection_data,则需要增加,注意名称不能改变,若sqlnet.ora中要求有domain的附加信息,则可以按照要求增加,如extproc_connection_data.zte.com.cn
另外,KEY和SID需要与listener.ora中的保持一致。
extproc_connection_data =
    (DESCRIPTION=
         (ADDRESS_LIST =
             (ADDRESS=(PROTOCOL=IPC)(KEY=EXTPROCTEST))
        )
        (CONNECT_DATA=
            (SID=PLSExtProc)
        ) )
1.3 使用举例
l 编写一个调用操作系统命令的程序,采用编辑器,编写一个C程序:extproc.c
---- 程序代码开始 ---------
int sysrun(char *command)
    {
     return system(command);
    }
----- 程序代码结束 --------
l 使用make命令,将C程序编译成为.so程序
make –f $ORACLE_HOME/rdbms/demo/demo_rdbms.mk extproc_no_context SHARED_LIBNAME=extproc.so OBJS=extproc.o
l 将文件extproc.so复制到目录$ORACLE_HOME/lib下
cp extproc.so $ORACLE_HOME/lib/.
l 在数据库中,创建程序库
SQL> create or replace library shell_lib as ‘$ORACLE_HOME/lib/extproc.so’;
l 创建数据库存储过程,与extproc中的程序建立联系
create or replace procedure sysrun(syscomm in varcha2) as
     language C
     name “sysrun”
     library shell_lib
     parameters(syscomm string);
l 这样,就可以运行操作系统得命令了,如:
Begin
  -- 列出目录下的所有文件名到文件j01.txt中
  sysrun('/bin/ls -l >/tmp/j01.txt');
  -- 运行sql*loader工具
  Sysrun(’$ORACLE_HOME/bin/sqlldr userid=<连接串> control=<控制文件名>’);
end;