【问题标题】:Return variable using OPENQUERY使用 OPENQUERY 返回变量
【发布时间】:2021-11-08 21:22:56
【问题描述】:

我正在尝试创建一个从 ORACLE 数据库中读取表并返回序列号的简单函数。我想直接返回它,或者将值存储在@cwpSeq 中并将其返回给调用程序。

现在我收到错误:

标量值函数中的 RETURN 语句必须包含一个参数。

谁能帮帮我。

create  function dbo.get_cwpSeq_from_oracle(@COIL nvarchar(100) )
returns int as

begin

    DECLARE @cwpSeq int, @SQL nvarchar(1000);
    set @SQL = N'select * from openquery(DEV, 'select cwp_seq from apps.custom_wip_pieces where lot_number = ''' + @COIL + '')';
    
    return execute sp_executesql @SQL;
end;

【问题讨论】:

标签: sql-server openquery


【解决方案1】:

如前所述,在这种情况下,您应该使用带有输出参数的过程而不是函数。如果您想在 Oracle 链接服务器端完全执行查询并在此之后返回一些值,我建议使用如下动态:

Create Or Alter Procedure dbo.get_cwpSeq
    @COIL nvarchar(100),
    @cwp_seq Int Output
As

Declare @QueryText nVarChar(max)

Select @QueryText = 'Select @cwp_seq=cwp_seq 
                     From Openquery(DEV, 
                     ''Select cwp_seq 
                       From apps.custom_wip_pieces 
                       Where lot_number= ''''' + @COIL + ''''''') As Ora'; 
Execute sp_executesql @QueryText, N'@COIL nvarchar(100), @cwp_seq Int Output', @COIL = @COIL, @cwp_seq = @cwp_seq Output

据我了解,您的情况: 链接的服务器是“DEV”,表的所有者是“apps”。

【讨论】:

  • 安东感谢您的回复。我有一个快速澄清的问题。所以“DEV”是我们想要连接的 ORACLE DB 的通用名称。例如,如果我在 sql developer 中运行此命令,我将返回 'A' select * from openquery(DEV, 'select ''A'' from dual ');我们使用一个名为 WSCTS 的模式,所以调用仍然是“...DEV.WSCTS.dbo.sp_executesql...”
  • @esjones 对不起,这是我的错。我发布了 Oracle 链接服务器程序的编辑版本。
  • 成功了!谢谢!!
  • @esjones 不客气!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-09-28
  • 2020-07-31
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多