Db2 前端能否在服务程序内使用程序?

Db2 前端能否在服务程序内使用程序?,db2,ibm-midrange,db2-400,Db2,Ibm Midrange,Db2 400,我们有一个要求,要求前端团队在服务计划中使用什么程序。我们可以通过存储过程调用服务程序内部的过程来实现这一点 前端--调用-->存储过程--在服务程序内部调用-->过程 可以这样做吗?可以,下面是一个调用服务程序中的过程的存储过程示例。该过程在服务程序CrewWeb中称为DeleteTrip,它有一个输入参数和两个输出参数 CREATE PROCEDURE CREWCALL.WEB_DELETETRIP ( IN DOCNO DECIMAL(8, 0) , OUT ERROR

我们有一个要求,要求前端团队在服务计划中使用什么程序。我们可以通过存储过程调用服务程序内部的过程来实现这一点

前端--调用-->存储过程--在服务程序内部调用-->过程


可以这样做吗?

可以,下面是一个调用服务程序中的过程的存储过程示例。该过程在服务程序CrewWeb中称为DeleteTrip,它有一个输入参数和两个输出参数

CREATE PROCEDURE CREWCALL.WEB_DELETETRIP ( 
    IN DOCNO DECIMAL(8, 0) , 
    OUT ERRORCODE INTEGER , 
    OUT ERRORMSG CHAR(100) ) 
    LANGUAGE RPGLE 
    SPECIFIC CREWCALL.WEB_DELETETRIP 
    NOT DETERMINISTIC 
    MODIFIES SQL DATA 
    EXTERNAL NAME 'CREWOBJ/CREWWEB(DELETETRIP)' 
    PARAMETER STYLE GENERAL ; 

可以,下面是一个调用服务程序中的过程的存储过程示例。该过程在服务程序CrewWeb中称为DeleteTrip,它有一个输入参数和两个输出参数

CREATE PROCEDURE CREWCALL.WEB_DELETETRIP ( 
    IN DOCNO DECIMAL(8, 0) , 
    OUT ERRORCODE INTEGER , 
    OUT ERRORMSG CHAR(100) ) 
    LANGUAGE RPGLE 
    SPECIFIC CREWCALL.WEB_DELETETRIP 
    NOT DETERMINISTIC 
    MODIFIES SQL DATA 
    EXTERNAL NAME 'CREWOBJ/CREWWEB(DELETETRIP)' 
    PARAMETER STYLE GENERAL ; 
是的,您可以指向维修计划中的程序

关键选项是外部名称、语言和参数样式子句

请注意,在RPG IV中可以使用大小写混合的过程名称。因此,请确保使用通过DSPSRVPGM显示的名称

现在让我们来讨论参数样式,如果您试图快速重用现有过程,那么您可能会希望使用参数样式GENERAL。然而,这意味着存储的proc不能也不会在null输入上被调用

如果希望对NULL输入调用存储过程,则需要使用参数样式为SQL或带有NULL的GENERAL。问题是,这两种情况都意味着一些额外的参数被隐式地传递给RPG程序或过程。这意味着RPG代码必须设计为接受它们

参数样式SQL提供了最好的接口

指定除了CALL语句上的参数外, 将几个附加参数传递给外部过程。 参数的定义顺序如下:

前n个参数是在CREATE PROCEDURE语句中指定的参数。 n参数为参数的指标变量。 SQLSTATE的CHAR5输出参数。返回的SQLSTATE指示过程的成功或失败。SQLSTATE 返回值由外部程序分配。用户可以设置 将SQLSTATE设置为外部程序中的任何有效值以返回错误 或程序中的警告。 用于完全限定过程名称的VARCHAR517输入参数。 特定名称的VARCHAR128输入参数。 消息文本的VARCHAR1000输出参数。 以下附加参数可以作为最后一个参数传递 参数:

如果在CREATE PROCEDURE语句中指定了dbinfo,则为dbinfo结构的参数。 我的首选实践是创建一个新的RPGLE包装器,它接受参数样式SQL所需的参数列表,并调用现有的RPGLE prcoedure

这允许我在需要时接受一些空参数,并允许我更好地控制在发生任何错误时返回的SQLSTATE

另一个很好的参考是IBM红皮书,

是的,您可以指向服务程序中的过程

关键选项是外部名称、语言和参数样式子句

请注意,在RPG IV中可以使用大小写混合的过程名称。因此,请确保使用通过DSPSRVPGM显示的名称

现在让我们来讨论参数样式,如果您试图快速重用现有过程,那么您可能会希望使用参数样式GENERAL。然而,这意味着存储的proc不能也不会在null输入上被调用

如果希望对NULL输入调用存储过程,则需要使用参数样式为SQL或带有NULL的GENERAL。问题是,这两种情况都意味着一些额外的参数被隐式地传递给RPG程序或过程。这意味着RPG代码必须设计为接受它们

参数样式SQL提供了最好的接口

指定除了CALL语句上的参数外, 将几个附加参数传递给外部过程。 参数的定义顺序如下:

前n个参数是在CREATE PROCEDURE语句中指定的参数。 n参数为参数的指标变量。 SQLSTATE的CHAR5输出参数。返回的SQLSTATE指示过程的成功或失败。SQLSTATE 返回值由外部程序分配。用户可以设置 将SQLSTATE设置为外部程序中的任何有效值以返回错误 或程序中的警告。 用于完全限定过程名称的VARCHAR517输入参数。 特定名称的VARCHAR128输入参数。 消息文本的VARCHAR1000输出参数。 以下附加参数可以作为最后一个参数传递 参数:

如果在CREATE PROCEDURE语句中指定了dbinfo,则为dbinfo结构的参数。 我喜欢的做法 是创建一个新的RPGLE包装器,它接受参数样式SQL所需的参数列表,并调用现有的RPGLE prcoedure

这允许我在需要时接受一些空参数,并允许我更好地控制在发生任何错误时返回的SQLSTATE


另一个很好的参考是IBM红皮书,

参数样式的GENERAL不应与调用的NULL输入一起使用,因为GENERAL无法指示传递了NULL参数。@Charles I删除了调用的NULL输入,因为它在这种情况下没有意义。从一个现有的例子中复制,显然它不是最好的。Thank.PARAMETER STYLE GENERAL不应与CALLED ON NULL INPUT一起使用,因为GENERAL无法指示传递了NULL参数。@Charles I删除了CALLED ON NULL INPUT,因为它在这种情况下没有意义。从一个现有的例子中复制,显然它不是最好的。谢谢