设为首页
加入收藏夹

ORACLE的外部调用的实现
浏览选项:

  使用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用户下建的:

  ;
   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做任何事了



Copyright © 2004 wanxu.com All Rights Reserved