从SQL Server调用AS400 RPG返回参数



在我的SQL Server实例中,我有一个链接到AS400的服务器。

我想执行一个CLP程序,该程序采用两个参数,一个numeric(8,0)作为输入,一个alphanumeric(3)作为输出。

以下是我用来执行此操作的SQL命令:

DECLARE @Ret varchar(3)
DECLARE @Date varchar(8)
SET @Date = '20200721'
SET @Ret = '   '
EXEC ('CALL IASP01.WUTL.WUTL46(''' + @Date + ''', ''?'')', @Ret) AT AS400 
SELECT @Ret

该命令执行时没有出现错误,但不会返回任何结果。

第二个参数是varchar(3)参数,因为AS400期望一个字母数字参数返回结果,但它总是空的。

有人能帮我吗?

提前感谢

更新:

我还尝试创建一个只接受1个参数并修改其值的简单CLP。以下是简单的CLP代码:

PGM        PARM(&DATA)                                  
DCL        VAR(&DATA) TYPE(*DEC) LEN(8 0)                
CHGVAR     VAR(&DATA) VALUE(20200722)                                                                       
ENDPGM          

这是一个非常简单的程序,它接受一个数字(8,0(参数并修改它的值。

下面是我用来执行DB2RPG:的SqlServer代码

声明@P1数字(8,0(选择@P1=000000000

AS400上的exec('CALL.<RPG_Name>(''?''(',@P1 OUTPUT(选择@P1

执行成功,没有出现错误。在这个调用之后,@P1变量包含初始值,而不是修改后的值,所以我无法获得";返回";Sql Server中的值。我该怎么做?

或者,如何从CLP向Sql Server返回值?

感谢

尝试在DB2中创建一个存储过程定义。我很惊讶它在没有这一点的情况下还能工作,但也许DB2足够聪明,可以在使用默认参数定义的调用中调用程序。遗憾的是,默认的参数定义是"仅输入"。

您可以在知识库中找到文档。但它是这样的:

CREATE PROCEDURE SIMPLE_CLP
(INOUT DATA DECIMAL(8, 0))
LANGUAGE CL
PARAMETER STYLE GENERAL
DETERMINISTIC
NO SQL
EXTERNAL NAME 'SIMPLE_CLP';

然后您应该能够使用INOUT参数。

相关内容

  • 没有找到相关文章

最新更新