广

oracle数据库

  • MYSQL
  • MSSQL
  • Redis
  • MongoDB
  • oracle数据库
  • 数据管理

    Oracle调用外部程序C++常见问题解决

    2018-04-06 10:40:24 次阅读 稿源:互联网
    广告
    全网推广平台,软文发布

      创建的 library  

       createorreplacelibraryMYLIB
      as'D:installedoracleora92bintest1.dll';

      dll 中定义了一个方法 int fnTest1(void) 返回一个数字

      函数

       CREATEORREPLACEFUNCTIONmytest1RETURNDOUBLEPRECISIONAS
      LANGUAGECNAME"fnTest1"
      LIBRARYMYLIB
      PARAMETERS(RETURNDOUBLE);

      说明: 

       ORA-28575:unabletoopenRPCconnectiontoexternalprocedureagent

      解决:  

       1.tnsnames.ora需要配置EXTPROC_CONNECTION_DATA
      EXTPROC_CONNECTION_DATA=
      (DESCRIPTION=
      (ADDRESS_LIST=
      (ADDRESS=(PROTOCOL=IPC)(KEY=EXTPROC0))
      (ADDRESS=(PROTOCOL=TCP)(HOST=127.0.0.1)(PORT=1521))
      )
      (CONNECT_DATA=
      (SID=PLSExtProc)
      (PRESENTATION=RO)
      )
      (CONNECT_DATA=
      (SID=ora10g)
      (PRESENTATION=RO)
      )
      )

      2. listener.ora 需要配置 (PROGRAM = extproc) 

       SID_LIST_LISTENER=
      (SID_LIST=
      (SID_DESC=
      (SID_NAME=PLSExtProc)
      (ORACLE_HOME=D:oracleproduct10.2.0db_1)
      (PROGRAM=extproc)
      )
      (SID_DESC=
      (SID_NAME=ora10g)
      (ORACLE_HOME=D:oracleproduct10.2.0db_1)
      )
      )
      ORA6521PL/SQL:Errormappingfunction

      解决:

       Note:297906.1 
      Cause 
      UsageofC++file(*.cpp)insteadofCfile(*.c)assourceforbuildingtheDLL 
      Thelibrarygeneratedcontainsthefunctionwiththedecoratednamewhichismangledbydefault 
      Solution 
      Toimplementthesolution,pleaseusethefollowingcodeforthe*.cppcode: 
      #ifdef__cplusplus 
      extern"C"{ 
      #endif 
      int__declspec(dllexport)square_of(intx) 
      { 
      return(x*x); 
      } 
      #ifdef__cplusplus 
      } 
      #endif

    一起学吧部分文章转载自互联网,供读者交流和学习,若有涉及作者版权等问题请及时与我们联系,以便更正、删除或按规定办理。感谢所有提供资讯的网站,欢迎各类媒体与一起学吧进行文章共享合作。

    广告
    广告
    广告
    广告