我从vb调用存储过程,在存储过程中调用外部dll中的函数。请看这些设置对吗?
运行时错误:
ORA-28575: unable to open RPC connection to external procedure agent1)in tnsnames.oraextproc_connection_data = (DESCRIPTION =
                              (ADDRESS = (PROTOCOL=IPC)
                                         (KEY=extproc_key)
                               )
                             (CONNECT_DATA = (SID = extproc_agent)
                           )2)in listener.ora 
EXTERNAL_PROCEDURE_LISTENER = (ADDRESS_LIST =
    (ADDRESS = (PROTOCOL=ipc)
               (KEY=extproc_key)
     )
)SID_LIST_EXTERNAL_PROCEDURE_LISTENER =
(SID_LIST =
     (SID_DESC = (SID_NAME=extproc_agent)
                 (ORACLE_HOME=E:/oracle/ora92)
                 (PROGRAM=extproc)
      )
)
3) CREATE LIBRARY AGIS_LIB  AS  'F:/projects/test/vctstdll/debug/vctstdll.dll';

4) PL/SQL
CREATE PROCEDURE  TESTPROC (
(
 STR1 in VARCHAR2
)
as
    RES PLS_INTEGER;
begin
    RES := TEST_1(STR1);
end;CREATE FUNCTION TEST_1 (
   STR_IN VARCHAR2 , 
)RETURN PLS_INTEGER
 AS EXTERNAL
   LIBRARY AGIS_LIB
   NAME "test1"  
   LANGUAGE C;5)DLL中的函数原型:
_declspec(dllexport) long  _stdcall test1(LPTSTR strIn);

解决方案 »

  1.   

    SID_LIST_EXTERNAL_PROCEDURE_LISTENER =
    (SID_LIST =
         (SID_DESC = (SID_NAME=extproc_agent)
                     (ORACLE_HOME=E:/oracle/ora92)
                     (ENVS=EXTPROC_DLLS=F:/projects/test/vctstdll/debug/vctstdll.dll)
                     (PROGRAM=extproc)
          )
    )
    需要指明dll所在位置
    (ENVS=EXTPROC_DLLS=F:/projects/test/vctstdll/debug/vctstdll.dll)
      

  2.   

    可是我现在在net manager中的测试都不能通过,报告错误:
      ora-03113:  end-of-file on communication channel
    意思是连对extproc.exe的连接都不能建立。
    请看看.ora文件的配置,基本是缺省:(会是因为当前用户对extproc的权限不够吗?)
    1)listener.ora
    LISTENER =
      (DESCRIPTION_LIST =
        (DESCRIPTION =
          (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC))
        )
        (DESCRIPTION =
          (ADDRESS = (PROTOCOL = TCP)(HOST = sgcos008)(PORT = 1521))
        )
      )SID_LIST_LISTENER =
      (SID_LIST =
        (SID_DESC =
          (GLOBAL_DBNAME = AGISDB01)
          (ORACLE_HOME = e:\oracle\ora92)
          (SID_NAME = AGISDB01)
        )
        (SID_DESC =
          (PROGRAM = extproc)
          (SID_NAME = extproc)
          (ORACLE_HOME = e:\oracle\ora92)
        )
      )2)tnsnames.ora
    ...
    EXTPROC_CONNECTION_DATA =
      (DESCRIPTION =
        (ADDRESS_LIST =
          (ADDRESS = (PROTOCOL = IPC)(Key = EXTPROC))
        )
        (CONNECT_DATA =
          (SID = extproc)
          (PRESENTATION = RO)
        )
      )一定高分相送!谢谢!
      

  3.   

    具体的我也不太清楚。下面是我的配置文件,供你参考:
    1)listener.oraLISTENER =
      (DESCRIPTION =
        (ADDRESS = (PROTOCOL = TCP)(HOST = houwenqiang)(PORT = 1521))
      )STARTUP_WAIT_TIME_LISTENER = 0
    CONNECT_TIMEOUT_LISTENER = 10
    TRACE_LEVEL_LISTENER = ONSID_LIST_LISTENER =
      (SID_LIST =
        (SID_DESC =
          (GLOBAL_DBNAME = Ora.domain)
          (ORACLE_HOME = D:\oracle\ora92)
          (SID_NAME = Ora)
        )
        (SID_DESC =
          (PROGRAM = extproc)
          (SID_NAME = PLSExtProc)
          (ENVS=EXTPROC_DLLS=f:\lexer\OraLexer.dll)
          (ORACLE_HOME = D:\oracle\ora92)
        )
      )
    2)tnsnames.ora
    ORA_192.168.168.111 =
      (DESCRIPTION =
        (ADDRESS_LIST =
          (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.168.111)(PORT = 1521))
        )
        (CONNECT_DATA =
          (SID = ORA)
          (SERVER = DEDICATED)
        )
      )ORA.HAILIANG.COM =
      (DESCRIPTION =
        (ADDRESS_LIST =
          (ADDRESS = (PROTOCOL = TCP)(HOST = houwenqiang)(PORT = 1521))
        )
        (CONNECT_DATA =
          (SERVER = DEDICATED)
          (SERVICE_NAME = Ora.domain)
        )
      )ORA_HAILLIANG.COM =
      (DESCRIPTION =
        (ADDRESS_LIST =
          (ADDRESS = (PROTOCOL = TCP)(HOST = Hailliang.com)(PORT = 1521))
        )
        (CONNECT_DATA =
          (SID = ORA)
          (SERVER = DEDICATED)
        )
      )EXTPROC_CONNECTION_DATA.HAILIANG.COM =
      (DESCRIPTION =
        (ADDRESS_LIST =
          (ADDRESS = (PROTOCOL = TCP)(HOST = houwenqiang)(PORT = 1521))
        )
        (CONNECT_DATA =
          (SID = PLSExtProc)
          (PRESENTATION = RO)
        )
      )INST1_HTTP.HAILIANG.COM =
      (DESCRIPTION =
        (ADDRESS_LIST =
          (ADDRESS = (PROTOCOL = TCP)(HOST = houwenqiang)(PORT = 1521))
        )
        (CONNECT_DATA =
          (SERVER = SHARED)
          (SERVICE_NAME = MODOSE)
          (PRESENTATION = http://HRService)
        )
      )