网络编程 | 站长之家 | 网页制作 | 图形图象 | 操作系统 | 冲浪宝典 | 软件教学 | 网络办公 | 邮件系统 | 网络安全 | 认证考试 | 系统进程
Firefox | IE | Maxthon | 迅雷 | 电驴 | BitComet | FlashGet | QQ | QQ空间 | Vista | 输入法 | Ghost | Word | Excel | wps | Powerpoint
asp | .net | php | jsp | Sql | c# | Ajax | xml | Dreamweaver | FrontPages | Javascript | css | photoshop | fireworks | Flash | Cad | Discuz!
当前位置 > 网站建设学院 > 网络编程 > 数据库 > Oracle教程
Tag:注入,存储过程,分页,安全,优化,xmlhttp,fso,jmail,application,session,防盗链,stream,无组件,组件,md5,乱码,缓存,加密,验证码,算法,cookies,ubb,正则表达式,水印,索引,日志,压缩,base64,url重写,上传,控件,Web.config,JDBC,函数,内存,PDF,迁移,结构,破解,编译,配置,进程,分词,IIS,Apache,Tomcat,phpmyadmin,Gzip,触发器,socket
数据库:数据库教程,数据库技巧,Oracle教程,MySQL教程,Sybase教程,Access教程,DB2教程,数据库安全,数据库文摘
本月文章推荐
.truncate,delete,drop的异同点.
.Oracle数据库.
.Oracle中大文本操作实例.
.确定用户是否属于某个角色.
.oracle 分析函数的使用.
.Shrink Undo表空间,释放过度占用.
.如何修改和删除bfile类型的数据.
.获得应用程序所执行的SQL语句.
.Oracle:一条SQL实现将多行数据并.
.Oracles XMLDB Study NOTE (3).
.ORACLE 数据库备份技术(1).
.如何处理Oracle数据库中的坏块问.
.学习Oracle--Statspack分析.
.Oracle 10g数据库中如何分析响应.
.Oracle数据库用VPD来确保信息的隐.
.10g DBMS_Scheduler本地特权提升.
.必须引起DBA重视的Oracle数据库碎.
.vsftpd-1.1.3配制实例之一:INTE.
.实战经验为何数据库归档日志名称.
.Oracle数据库操作类(c#).

ORACLE的外部调用的实现

发表日期:2008-2-9



  使用Oracle的外部调用大致分以下几步:
  
  1、编写共享库(或动态连接库),也就是你想调用的过程或函数。
  2、设置listener.ora和tnsnames.ora,确保外部调用的服务可用。
  3、create library
  4、create function or procedure
  
  下面的例子是在solaris 7 + oracle 816环境下通过的,只是写一个随机函数。
  
  
  1、编写共享库:
  
  test.c:
  #include
  #include
  
  int ora_rand()
  {
   int rao;
   rao = rand();
   return rao;
  }
  
  编译:
  
  $ gcc -c test.c
  $ ls
  test.c test.o
  $ ld -G test.o -o test.so
  $ ls
  test.c test.o test.so
  
  2、配置listener.ora和tnsnames.ora
  
  listener.ora:
  # Generated by Oracle configuration tools.
  
  LISTENER =
   (DESCRIPTION_LIST =
   (DESCRIPTION =
   (ADDRESS_LIST =
   (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC))
   (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.2.99)(PORT = 1521))
  
   )
   )
   )
  
  SID_LIST_LISTENER =
   (SID_LIST =
   (SID_DESC =
   (SID_NAME = PLSExtProc)
   (ORACLE_HOME = /home/oracle/prodUCt/816)
   (PROGRAM = extproc)
   )
   (SID_DESC =
   (ORACLE_HOME = /home/oracle/product/816)
   (SID_NAME = sid1)
   )
   )
  
  tnsnames.ora:
  # Generated by Oracle configuration tools.
  
  EXTPROC_CONNECTION_DATA =
   (DESCRIPTION =
   (ADDRESS_LIST =
   (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC))
   )
   (CONNECT_DATA =
   (SID = PLSExtProc)
   (PRESENTATION = RO)
   )
   )
  
  sid1 =
   (DESCRIPTION =
   (ADDRESS_LIST =
   (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.2.99)(PORT = 1521))
   )
   (CONNECT_DATA =
   (SERVICE_NAME = sid1)
   )
   )
  
  当然文件都是本地的
  
  3、create library:
  
  create library 要有相应的权限,我为了省事,就在system用户下建的:
  
  SQL> CREATE OR REPLACE LIBRARY ext_lib IS '/home/oracle/local/test.so'
  ;
   2 /
  
  Library created.
  
  
  4、create function:
  
  SQL> create function test_rand
   2 return binary_integer as language c
   3 name "ora_rand"
   4 library ext_lib;
   5 /
  
  Function created.
  
  然后就可以调用test_rand生成随机数了:
  
  SQL> select 1*test_rand from dual;
  
  1*TEST_RAND
  -----------
   16838
  
  SQL> /
  
  1*TEST_RAND
  -----------
   5758
  
  SQL> /
  
  1*TEST_RAND
  -----------
   10113
  
  这个函数生成的随机数在0到32767之间。

  
  以上只是一个很简单的例子,只要把握了方法,理论上就可以用PL/SQL做任何事了
上一篇:Oracle预定义角色 人气:597
下一篇:ORACLE *Graphics中不同类型图形切换的实现 人气:544
浏览全部Oracle教程的内容 Dreamweaver插件下载 网页广告代码 祝你圣诞节快乐 2009年新年快乐