在AS400上,如何使用结构化参数从SQL用户定义函数调用COBOL程序?
我想在Select语句中使用SQLUDF调用COBOL程序。如果你需要更多信息,请告诉我 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
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模块,并为其编制一个服务程序可能更安全。