如何有可选的输出参数
How to have optional OUTPUT parameter
我有一个动态存储过程,用于 运行 多个 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 时,我将在 IN_COLUMN1、IN_COLUMN2、IN_COLUMN3 中从 COBOL DB2 程序传递输入,并将获取输出进入 OUT_COLUMN1。我将初始化程序中的所有输入,由于 OUT_COLUMN2、OUT_COLUMN3、OUT_COLUMN4 和 OUT_COLUMN5 等其他输出参数将为空,我得到 SQLCODE "-305 ".
为了解决这个问题,我尝试将 OUTPUT 参数设置为默认值,但在部署时出现错误。
OUT OUT_COLUMN2 DEC(4,0) DEFAULT NULL,
有什么办法可以解决这个问题。我正在使用 COBOL 调用 DB2 中的存储过程 运行ning。
假设使用 IBM Enterprise COBOL,
要在 SQL 中处理 COBOL 主变量中的空值,您需要为每个可为空的变量分配一个“空指示符”。
参见:Using host variables in SQL Statements(使用 COBOL 格式的示例)。
如果结果变量为空,则空指示符通常为负。
默认情况下,z/OS 本机 SQL 存储过程的 DB2 的所有参数都可以为空。 (Db2 for z/OS 12.0.0 - Creating Native SQL Procedures)
对于解决我认为是手头任务的其他方法,
虽然我认为至少 DB2 用户定义函数可能支持 function overloading,但存储过程不支持。那可能是另一种选择。
否则我可以建议从您的存储过程返回一个动态结果集吗?然后由存储过程的调用者来处理结果集的不同配置,这在 COBOL 中是完全可行的。
关于 UDF 重载:
“一个模式可以包含多个函数,这些函数具有相同的名称,但每个函数具有不同数量的参数或具有不同数据类型的参数。此外,具有相同名称、参数数量和类型的函数参数可以存在于多个模式中。"
希望对您有所帮助。
我有一个动态存储过程,用于 运行 多个 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 时,我将在 IN_COLUMN1、IN_COLUMN2、IN_COLUMN3 中从 COBOL DB2 程序传递输入,并将获取输出进入 OUT_COLUMN1。我将初始化程序中的所有输入,由于 OUT_COLUMN2、OUT_COLUMN3、OUT_COLUMN4 和 OUT_COLUMN5 等其他输出参数将为空,我得到 SQLCODE "-305 ".
为了解决这个问题,我尝试将 OUTPUT 参数设置为默认值,但在部署时出现错误。
OUT OUT_COLUMN2 DEC(4,0) DEFAULT NULL,
有什么办法可以解决这个问题。我正在使用 COBOL 调用 DB2 中的存储过程 运行ning。
假设使用 IBM Enterprise COBOL,
要在 SQL 中处理 COBOL 主变量中的空值,您需要为每个可为空的变量分配一个“空指示符”。
参见:Using host variables in SQL Statements(使用 COBOL 格式的示例)。
如果结果变量为空,则空指示符通常为负。
默认情况下,z/OS 本机 SQL 存储过程的 DB2 的所有参数都可以为空。 (Db2 for z/OS 12.0.0 - Creating Native SQL Procedures)
对于解决我认为是手头任务的其他方法,
虽然我认为至少 DB2 用户定义函数可能支持 function overloading,但存储过程不支持。那可能是另一种选择。
否则我可以建议从您的存储过程返回一个动态结果集吗?然后由存储过程的调用者来处理结果集的不同配置,这在 COBOL 中是完全可行的。
关于 UDF 重载:
“一个模式可以包含多个函数,这些函数具有相同的名称,但每个函数具有不同数量的参数或具有不同数据类型的参数。此外,具有相同名称、参数数量和类型的函数参数可以存在于多个模式中。"
希望对您有所帮助。