在AS400上,如何使用结构化参数从SQL用户定义函数调用COBOL程序?

时间:2014-01-16 02:53:03

标签: sql ibm-midrange cobol

我想在Select语句中使用SQL UDF调用COBOL程序。如果您需要更多信息,请与我们联系。

COBOL数据结构:

01  WS-FOO.
    03 WS-FOO-ID                PIC X(16).
    03 WS-FOO-NAME              PIC X(16).

COBOL代码:

PROCEDURE DIVISION USING WS-FOO. 

不起作用的SQL函数:

CREATE FUNCTION ANTHONY.FOO (CHAR(16), CHAR(16)) 
RETURNS CHAR(16) 
EXTERNAL NAME FOO.FOO
LANGUAGE COBOL 
NO SQL  
PARAMETER STYLE SQL;

1 个答案:

答案 0 :(得分:4)

您需要在CREATE FUNCTION (external scalar)的信息中心页面上阅读有关PARAMETER STYLE的部分。

如果您的UDF有两个参数,那么您的COBOL程序将需要这两个参数 plus 其他参数,如PARAMETER STYLE SQL所述。您可能更喜欢PARAMETER STYLE GENERAL的更简单的参数列表。使用GENERAL,您可以将COBOL代码编译为ILE服务程序。我将在此示例中更改长度。

CREATE FUNCTION ANTHONY.FOO ( BAR_ID CHAR(6), BAR_NAME CHAR(10)) 
  RETURNS CHAR(16) 
  EXTERNAL NAME 'MYLIB/MYSVCPGM(MYPROC)'
  LANGUAGE COBOLLE   PROGRAM TYPE SUB
  NO SQL  
  PARAMETER STYLE GENERAL;

在您的COBOL数据部门链接部分

01 LS-BAR-ID            CHAR(6).
01 LS-BAR-NAME          CHAR(10).
01 LS-BAR-RESULT        CHAR(16).

其次是

PROCEDURE DIVISION USING LS-BAR-ID, LS-BAR-NAME
                   RETURNING LS-BAR-RESULT.