无法从 Oracle 的 SQL 服务器链接服务器获取数据
Unable to fetch data from SQL Server linked server from oracle
我们正在将 SQL Server 2005 升级到 SQL Server 2014 和 Windows Server 2012。
我们在SQL服务器中有链接服务器来连接到oracle来获取数据,在旧环境中我们使用的是MSDAORA提供程序。
但是在新环境中安装 Oracle 客户端时,我们没有获得 MSDAORA Provider。
当谷歌搜索发现此 "MSDAORA" 提供程序已弃用时。所以我们正在尝试使用 ORAOLEDB.ORACLE.
获取数据
使用链接服务器从 Oracle 调用存储过程时出现以下错误。
OLE DB provider "ORAOLEDB.Oracle" for linked server "NPMSE" returned
message "ORA-06550: line 1, column 8:
PLS-00306: wrong number or types of arguments in call to
'GETNEWINFOPROJECT'
ORA-06550: line 1, column 8:
PL/SQL: Statement ignored".
Msg 7215, Level 17, State 1, Line 1
Could not execute statement on remote server 'NPMSE'
但是在旧环境(使用 MSDAORA)中执行相同的存储过程时,我们得到了预期的结果。
以下是来自 Oracle 的存储过程代码。
PROCEDURE GETNEWINFOPROJECT
( i_projectname IN PROJECT.NAME%TYPE
, i_locationname IN LOCATION.NAME%TYPE
, o_newObject_cursor OUT PKGAPPCMOR.R_CURSOR )
AS
huge Business logic
END GETNEWINFOPROJECT;
我们怀疑可能是 (o_newObject_cursor OUT PKGAPPCMOR.R_CURSOR ) 导致了这个问题。
尝试了不同的方法。
已下载 "MSDAORA" 并尝试安装失败。
在链接服务器中放置 "inProcess" 无效。
现在我们怀疑 OLEDB ORA 与我们在 Oracle 中使用的任何数据类型都不兼容。
因此我们 运行 没时间了,需要专家的建议来找出问题所在,如果有人遇到这个问题,请回复。
非常感谢您的帮助。
提前致谢。
下面是我的链接服务器脚本:
IF EXISTS (SELECT srv.name FROM sys.servers srv WHERE srv.server_id != 0 AND srv.name = N'NPMSE')EXEC master.dbo.sp_dropserver @server=N'NPMSE', @droplogins='droplogins'
GO
/ Object: LinkedServer [NPMSE] Script Date: 12/16/2016 17:15:37 /
EXEC master.dbo.sp_addlinkedserver @server = N'NPMSE', @srvproduct=N'Oracle', @provider=N'ORAOLEDB.Oracle', @datasrc=N'xxx', @provstr=N'UID=xxx;PWD=xxx'
/ For security reasons the linked server remote logins password is changed with ######## /
EXEC master.dbo.sp_addlinkedsrvlogin @rmtsrvname=N'NPMSE',@useself=N'False',@locallogin=NULL,@rmtuser=N'xxx',@rmtpassword='########'
GO
EXEC master.dbo.sp_serveroption @server=N'NPMSE', @optname=N'collation compatible', @optvalue=N'false'
GO
EXEC master.dbo.sp_serveroption @server=N'NPMSE', @optname=N'data access', @optvalue=N'true'
GO
EXEC master.dbo.sp_serveroption @server=N'NPMSE', @optname=N'dist', @optvalue=N'false'
GO
EXEC master.dbo.sp_serveroption @server=N'NPMSE', @optname=N'pub', @optvalue=N'false'
GO
EXEC master.dbo.sp_serveroption @server=N'NPMSE', @optname=N'rpc', @optvalue=N'true'
GO
EXEC master.dbo.sp_serveroption @server=N'NPMSE', @optname=N'rpc out', @optvalue=N'true'
GO
EXEC master.dbo.sp_serveroption @server=N'NPMSE', @optname=N'sub', @optvalue=N'false'
GO
EXEC master.dbo.sp_serveroption @server=N'NPMSE', @optname=N'connect timeout', @optvalue=N'0'
GO
EXEC master.dbo.sp_serveroption @server=N'NPMSE', @optname=N'collation name', @optvalue=null
GO
EXEC master.dbo.sp_serveroption @server=N'NPMSE', @optname=N'lazy schema validation', @optvalue=N'false'
GO
EXEC master.dbo.sp_serveroption @server=N'NPMSE', @optname=N'query timeout', @optvalue=N'0'
GO
EXEC master.dbo.sp_serveroption @server=N'NPMSE', @optname=N'use remote collation', @optvalue=N'true'
GO
EXEC master.dbo.sp_serveroption @server=N'NPMSE', @optname=N'remote proc transaction promotion', @optvalue=N'true'
GO
我们正在使用此查询从 SQL 服务器调用存储过程。
EXEC( ' BEGIN NPMSE_INTERFACE.PKGAPP.GETNEWINFOPROJECT(''LB1735'',''TORO'');END;' ) ATNPMSE;
出现错误:
OLE DB provider "ORAOLEDB.Oracle" for linked server "NPMSE" returned message "ORA-06550: line 1, column 8:
PLS-00306: wrong number or types of arguments in call to 'GETNEWINFOPROJECT'
ORA-06550: line 1, column 8:
PL/SQL: Statement ignored".
Msg 7215, Level 17, State 1, Line 1
Could not execute statement on remote server 'NPMSE'
以后可能对其他人有帮助。
exec sp_addlinkedserver @server=N'MyOracle',
@srvproduct='Oracle',
@provider= 'ORAOLEDB.Oracle',
@datasrc= N'//10.0.0.22/xe',
@provstr= N'FetchSize=2000;PLSQLRSet=1'
并且您需要按以下方式调用 oracle sp。
EXEC( '{CALL HR.GETNEWINFOPROJECT(''LB1735'',''TORO'')}' ) at MyOracle;
我们正在将 SQL Server 2005 升级到 SQL Server 2014 和 Windows Server 2012。
我们在SQL服务器中有链接服务器来连接到oracle来获取数据,在旧环境中我们使用的是MSDAORA提供程序。
但是在新环境中安装 Oracle 客户端时,我们没有获得 MSDAORA Provider。
当谷歌搜索发现此 "MSDAORA" 提供程序已弃用时。所以我们正在尝试使用 ORAOLEDB.ORACLE.
获取数据使用链接服务器从 Oracle 调用存储过程时出现以下错误。
OLE DB provider "ORAOLEDB.Oracle" for linked server "NPMSE" returned message "ORA-06550: line 1, column 8:
PLS-00306: wrong number or types of arguments in call to 'GETNEWINFOPROJECT'
ORA-06550: line 1, column 8:
PL/SQL: Statement ignored".
Msg 7215, Level 17, State 1, Line 1
Could not execute statement on remote server 'NPMSE'
但是在旧环境(使用 MSDAORA)中执行相同的存储过程时,我们得到了预期的结果。
以下是来自 Oracle 的存储过程代码。
PROCEDURE GETNEWINFOPROJECT
( i_projectname IN PROJECT.NAME%TYPE
, i_locationname IN LOCATION.NAME%TYPE
, o_newObject_cursor OUT PKGAPPCMOR.R_CURSOR )
AS
huge Business logic
END GETNEWINFOPROJECT;
我们怀疑可能是 (o_newObject_cursor OUT PKGAPPCMOR.R_CURSOR ) 导致了这个问题。
尝试了不同的方法。
已下载 "MSDAORA" 并尝试安装失败。
在链接服务器中放置 "inProcess" 无效。
现在我们怀疑 OLEDB ORA 与我们在 Oracle 中使用的任何数据类型都不兼容。
因此我们 运行 没时间了,需要专家的建议来找出问题所在,如果有人遇到这个问题,请回复。
非常感谢您的帮助。
提前致谢。
下面是我的链接服务器脚本:
IF EXISTS (SELECT srv.name FROM sys.servers srv WHERE srv.server_id != 0 AND srv.name = N'NPMSE')EXEC master.dbo.sp_dropserver @server=N'NPMSE', @droplogins='droplogins'
GO
/ Object: LinkedServer [NPMSE] Script Date: 12/16/2016 17:15:37 /
EXEC master.dbo.sp_addlinkedserver @server = N'NPMSE', @srvproduct=N'Oracle', @provider=N'ORAOLEDB.Oracle', @datasrc=N'xxx', @provstr=N'UID=xxx;PWD=xxx'
/ For security reasons the linked server remote logins password is changed with ######## /
EXEC master.dbo.sp_addlinkedsrvlogin @rmtsrvname=N'NPMSE',@useself=N'False',@locallogin=NULL,@rmtuser=N'xxx',@rmtpassword='########'
GO
EXEC master.dbo.sp_serveroption @server=N'NPMSE', @optname=N'collation compatible', @optvalue=N'false'
GO
EXEC master.dbo.sp_serveroption @server=N'NPMSE', @optname=N'data access', @optvalue=N'true'
GO
EXEC master.dbo.sp_serveroption @server=N'NPMSE', @optname=N'dist', @optvalue=N'false'
GO
EXEC master.dbo.sp_serveroption @server=N'NPMSE', @optname=N'pub', @optvalue=N'false'
GO
EXEC master.dbo.sp_serveroption @server=N'NPMSE', @optname=N'rpc', @optvalue=N'true'
GO
EXEC master.dbo.sp_serveroption @server=N'NPMSE', @optname=N'rpc out', @optvalue=N'true'
GO
EXEC master.dbo.sp_serveroption @server=N'NPMSE', @optname=N'sub', @optvalue=N'false'
GO
EXEC master.dbo.sp_serveroption @server=N'NPMSE', @optname=N'connect timeout', @optvalue=N'0'
GO
EXEC master.dbo.sp_serveroption @server=N'NPMSE', @optname=N'collation name', @optvalue=null
GO
EXEC master.dbo.sp_serveroption @server=N'NPMSE', @optname=N'lazy schema validation', @optvalue=N'false'
GO
EXEC master.dbo.sp_serveroption @server=N'NPMSE', @optname=N'query timeout', @optvalue=N'0'
GO
EXEC master.dbo.sp_serveroption @server=N'NPMSE', @optname=N'use remote collation', @optvalue=N'true'
GO
EXEC master.dbo.sp_serveroption @server=N'NPMSE', @optname=N'remote proc transaction promotion', @optvalue=N'true'
GO
我们正在使用此查询从 SQL 服务器调用存储过程。
EXEC( ' BEGIN NPMSE_INTERFACE.PKGAPP.GETNEWINFOPROJECT(''LB1735'',''TORO'');END;' ) ATNPMSE;
出现错误:
OLE DB provider "ORAOLEDB.Oracle" for linked server "NPMSE" returned message "ORA-06550: line 1, column 8:
PLS-00306: wrong number or types of arguments in call to 'GETNEWINFOPROJECT'
ORA-06550: line 1, column 8:
PL/SQL: Statement ignored".
Msg 7215, Level 17, State 1, Line 1
Could not execute statement on remote server 'NPMSE'
以后可能对其他人有帮助。
exec sp_addlinkedserver @server=N'MyOracle',
@srvproduct='Oracle',
@provider= 'ORAOLEDB.Oracle',
@datasrc= N'//10.0.0.22/xe',
@provstr= N'FetchSize=2000;PLSQLRSet=1'
并且您需要按以下方式调用 oracle sp。
EXEC( '{CALL HR.GETNEWINFOPROJECT(''LB1735'',''TORO'')}' ) at MyOracle;