Oracle dynamic call external C library functions

 Category: Oracle

2016-08-20 05:24:52

As the project in order to shorten development time, to have developed a good call an external C program in Oracle.
Find some posts online, combined with the actual summary of this article. I hope to be helpful.
Reference article: http: //www.cnblogs.com/mathitlin99/archive/2013/09/05/3303717.html

first compile the external dynamic library <span "=" "> libDialPlan.so

Click ( here) folded or unfolded

  1. gcc -fPIC -c LibDialPlan.cpp
  2. gcc -shared -o libDialPlan.so LibDialPlan.o -lstdc++

Modify files and Oracle TNS Listener files.
I do not know the direct copy is available. If you have questions, please pay attention to both sides of the equal sign and parentheses space .
tnsnames.ora

Click ( here) folded or unfolded

  1. ORADB =
  2.   (DESCRIPTION =
  3.     (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.69.166)(PORT = 1521))
  4.     (CONNECT_DATA =
  5.       (SERVER = DEDICATED)
  6.       (SERVICE_NAME = oradb)
  7.     ) 
  8.   )
  9. EXTPROC_CONNECTION_DATA=
  10.   (DESCRIPTION=
  11.     (ADDRESS_LIST=
  12.     (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))
  13.   )
  14.   (CONNECT_DATA=
  15.     (SID = PLSExtProc)
  16.     (PRESENTATION = RO)
  17.   )
  18.   )
listener.ora

Click ( here) folded or unfolded

  1. LISTENER =
  2.   (DESCRIPTION_LIST =
  3.     (DESCRIPTION =
  4.       (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))
  5.       (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.69.166)(PORT = 1521))
  6.     )
  7.   )
  8. ADR_BASE_LISTENER = /home/oracle/db/app
  9. SID_LIST_LISTENER =
  10. (SID_LIST =
  11.   (SID_DESC =
  12.   (GLOBAL_DBNAME = oradb)
  13.   (SID_NAME = oradb)
  14.   )
  15.   (SID_DESC=
  16.   (SID_NAME = PLSExtProc)
  17.   (ORACLE_HOME = /opt/local/oracle/app/product/11.2.0/dbhome_2)
  18.   (ENVS = EXTPROC_DLLS=ANY)
  19.   (PROGRAM = extproc)
  20.   ) 
  21. )

After the modification restart the listener: lsnrctl stop; lsnrctl start
viewing monitor status, should appear the following monitor items: PLSExtProc <span "=" "> 

Click ( here) folded or unfolded

  1. [root@localhost admin]# lsnrctl status
  2. LSNRCTL for Linux: Version 11.2.0.1.0 - Production on 04-AUG-2016 19:33:50
  3. Copyright (c) 1991, 2009, Oracle. All rights reserved.
  4. Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=IPC)(KEY=EXTPROC1521)))
  5. STATUS of the LISTENER
  6. ------------------------
  7. Alias LISTENER
  8. Version TNSLSNR for Linux: Version 11.2.0.1.0 - Production
  9. Start Date 04-AUG-2016 16:23:54
  10. Uptime 0 days 3 hr. 9 min. 55 sec
  11. Trace Level off
  12. Security ON: Local OS Authentication
  13. SNMP OFF
  14. Listener Parameter File /opt/local/oracle/app/product/11.2.0/dbhome_2/network/admin/listener.ora
  15. Listener Log File /opt/local/oracle/app/product/11.2.0/dbhome_2/network/log/listener.log
  16. Listening Endpoints Summary...
  17.   (DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=EXTPROC1521)))
  18.   (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=192.168.69.166)(PORT=1521)))
  19. Services Summary...
  20. Service "PLSExtProc" has 1 instance(s).
  21.   Instance "PLSExtProc", status UNKNOWN, has 1 handler(s) for this service...
  22. Service "oradb" has 1 instance(s).
  23.   Instance "oradb", status UNKNOWN, has 1 handler(s) for this service...
  24. The command completed successfully
  25. [root@localhost admin]#
Creating Oracle library objects

Click ( here) folded or unfolded

  1. create or replace library hytpdtbilldb.Fun_Ext_Proc
  2.   as '/opt/local/Oracle_install/Oracle_Call_External_C/libDialPlan.so';
Create function
) online articles, as well as a parameter according to the parameter 1.
But after I joined this parameter has not compile. After removal does not affect the use of the function.
2) corresponds to the numbers and strings binary_integer, varchar2 type. Originally C into an array type parameter is required, but no real Oracle array, only through a string instead.
3) In the course of my testing, and occasionally need to reboot to normal function is called. You can use the process to look at.

Click ( here) folded or unfolded

  1. create or replace function hytpdtbilldb.Air2Gsi
  2. (x binary_integer,y varchar2)
  3. return varchar2
  4. as
  5. language C
  6. library hytpdtbilldb.Fun_Ext_Proc 
  7. name "Air2Gsi";
  8. /

Guess you like

Origin www.cnblogs.com/buffercache/p/11446224.html