在我的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参数。