Stored procedures 如何设置可选的输出参数

Stored procedures 如何设置可选的输出参数,stored-procedures,db2,cobol,Stored Procedures,Db2,Cobol,我有一个动态存储过程,用于运行多个select查询。我定义了如下内容 CREATE PROCEDURE DYNAMIC (IN IN_COLUMN1 VARCHAR(150), IN IN_COLUMN2 VARCHAR(500), IN IN_COLUMN3 VARCHAR(500), IN IN_COLUMN4

我有一个动态存储过程,用于运行多个select查询。我定义了如下内容

CREATE PROCEDURE DYNAMIC                     
   (IN   IN_COLUMN1                VARCHAR(150), 
    IN   IN_COLUMN2                VARCHAR(500), 
    IN   IN_COLUMN3                VARCHAR(500), 
    IN   IN_COLUMN4                CHAR(08),     
    IN   IN_COLUMN5                DATE,     
    IN   IN_COLUMN6                CHAR(05),     
    OUT  OUT_COLUMN1               CHAR(01),     
    OUT  OUT_COLUMN2               DEC(4,0),     
    OUT  OUT_COLUMN3               DEC(4,0),     
    OUT  OUT_COLUMN4               CHAR(04), 
    OUT  OUT_COLUMN5               DATE
这里的问题是,当我运行Query1时,我将从coboldb2程序传入in_COLUMN1、in_COLUMN2、in_COLUMN3中的输入,并将输出提取到OUT_COLUMN1中。我将初始化程序中的所有输入,因为其他输出参数如OUT_COLUMN2、OUT_COLUMN3、OUT_COLUMN4和OUT_COLUMN5将为null,我得到的是SQLCODE“-305”

为了解决这个问题,我尝试将输出参数设置为默认值,如下所示,但在部署时出错

OUT  OUT_COLUMN2               DEC(4,0) DEFAULT NULL,

有没有办法处理这件事。我使用COBOL调用在DB2中运行的存储过程。

假设IBM Enterprise COBOL

要在SQL中处理COBOL主机变量中的空值,需要为每个可空变量分配一个“空指示符”

参见:(用COBOL语言举例说明)

如果结果变量为null,则null指示符通常为负值

默认情况下,DB2forz/OS本机SQL存储过程的所有参数都可以为空。()

对于解决我所感知的手头任务的其他方法

虽然我认为至少DB2用户定义函数可以支持,但存储过程不支持。这可能是另一种选择

否则,我是否可以建议从存储过程返回一个动态结果集?然后将由存储过程的调用者来处理结果集的不同配置,这在COBOL中是完全可行的

关于UDF重载:

一个架构可以包含多个同名函数,但每个函数都有不同数量的参数或具有不同数据类型的参数。此外,具有相同名称、参数数量和参数类型的函数可以存在于多个架构中


希望能有所帮助。

假设IBM Enterprise COBOL

要在SQL中处理COBOL主机变量中的空值,需要为每个可空变量分配一个“空指示符”

参见:(用COBOL语言举例说明)

如果结果变量为null,则null指示符通常为负值

默认情况下,DB2forz/OS本机SQL存储过程的所有参数都可以为空。()

对于解决我所感知的手头任务的其他方法

虽然我认为至少DB2用户定义函数可以支持,但存储过程不支持。这可能是另一种选择

否则,我是否可以建议从存储过程返回一个动态结果集?然后将由存储过程的调用者来处理结果集的不同配置,这在COBOL中是完全可行的

关于UDF重载:

一个架构可以包含多个同名函数,但每个函数都有不同数量的参数或具有不同数据类型的参数。此外,具有相同名称、参数数量和参数类型的函数可以存在于多个架构中


希望对您有所帮助。

谢谢,它起作用了,但我必须对所有输出字段使用NULL指示符,即使该字段定义为NOT NULL。谢谢,它起作用了,但我必须对所有输出字段使用NULL指示符,即使该字段定义为NOT NULL。