急!那位耐心帮我看一看这个pl/sql调用外部dll的问题.

bigbigrobin 2003-06-12 04:51:18
我从vb调用存储过程,在存储过程中调用外部dll中的函数。请看这些设置对吗?
运行时错误:
ORA-28575: unable to open RPC connection to external procedure agent

1)in tnsnames.ora

extproc_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);



...全文
132 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
houwenqiang 2003-06-18
  • 打赏
  • 举报
回复
具体的我也不太清楚。下面是我的配置文件,供你参考:
1)listener.ora

LISTENER =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = houwenqiang)(PORT = 1521))
)

STARTUP_WAIT_TIME_LISTENER = 0
CONNECT_TIMEOUT_LISTENER = 10
TRACE_LEVEL_LISTENER = ON

SID_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)
)
)


bigbigrobin 2003-06-17
  • 打赏
  • 举报
回复
可是我现在在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)
)
)

一定高分相送!谢谢!
houwenqiang 2003-06-13
  • 打赏
  • 举报
回复
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)

3,499

社区成员

发帖
与我相关
我的任务
社区描述
Oracle 高级技术相关讨论专区
社区管理员
  • 高级技术社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧