Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/heroku/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在AS400上,如何使用结构化参数从SQL用户定义函数调用COBOL程序?_Sql_Ibm Midrange_Cobol - Fatal编程技术网

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

在AS400上,如何使用结构化参数从SQL用户定义函数调用COBOL程序?,sql,ibm-midrange,cobol,Sql,Ibm Midrange,Cobol,我想在Select语句中使用SQLUDF调用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), CH

我想在Select语句中使用SQLUDF调用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;

您需要阅读上信息中心页面中有关参数样式的部分

如果您的UDF有两个参数,那么COBOL程序将需要这两个参数加上参数样式SQL中描述的其他参数。对于参数样式“常规”,您可能更喜欢更简单的参数列表。使用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.

您需要阅读上信息中心页面中有关参数样式的部分

如果您的UDF有两个参数,那么COBOL程序将需要这两个参数加上参数样式SQL中描述的其他参数。对于参数样式“常规”,您可能更喜欢更简单的参数列表。使用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.

你是说你的COBOL程序是OPM COBOL/400,还是ILE COBOL?我不确定。COBOL程序在AS400上运行。源代码“source-COMPUTER.IBM-AS400.OBJECT-COMPUTER.IBM-AS400”中有两行。如果显示程序信息[
DSPPGM
],它将显示程序是OPM还是ILE。根据惯例,您通常也可以通过源成员类型CBL或CBLLE来判断。您的COBOL程序是OPM COBOL/400还是ILE COBOL?我不确定。COBOL程序在AS400上运行。源代码“source-COMPUTER.IBM-AS400.OBJECT-COMPUTER.IBM-AS400”中有两行。如果显示程序信息[
DSPPGM
],它将显示程序是OPM还是ILE。根据惯例,您通常也可以通过源成员类型CBL或CBLLE来判断。这是否意味着如果不修改COBOL程序,就无法从UDF调用程序?我不能修改它。@Anthony普通COBOL程序在程序之间的参数方面不像函数那样运行(不需要返回)。对于一个函数,它是不同的。您需要更改COBOL程序,或者因为如果COBOL程序不是作为用户定义函数编写的,它就不能作为用户定义函数使用。或者您需要执行其他操作。@Anthony您可以使用SQL参数创建一个代理COBOL程序,并从中调用原始程序。@JamesA参数样式正在调用ILE服务程序。如果这仅仅是一个调用原始OPM程序的包装器,那么是否会出现一些激活组问题?我认为将代码编译(一份副本?)为一个ILE模块,并为其编制一个服务程序可能更安全。这是否意味着如果不修改COBOL程序,就无法从UDF调用该程序?我不能修改它。@Anthony普通COBOL程序在程序之间的参数方面不像函数那样运行(不需要返回)。对于一个函数,它是不同的。您需要更改COBOL程序,或者因为如果COBOL程序不是作为用户定义函数编写的,它就不能作为用户定义函数使用。或者您需要执行其他操作。@Anthony您可以使用SQL参数创建一个代理COBOL程序,并从中调用原始程序。@JamesA参数样式正在调用ILE服务程序。如果这仅仅是一个调用原始OPM程序的包装器,那么是否会出现一些激活组问题?我认为将代码编译(一份副本?)为一个ILE模块,并为其编制一个服务程序可能更安全。