如何接受部分变量(字符串)作为cobol中的动态值?
how to accept part of variable(string) as dynamic value in cobol?
我在工作存储部分有一个字段 WS_CONTRACT_NUM ,它有几个硬编码值 leght 15 characters.But 前 5 个字符可以是任何东西,我的问题是我如何声明这个变量在那种情况下。
WORKING STORAGE
01 WS_CONTRACT_NUM PIC X(15) VALUE '?????9999999999' --- > instead of '?' what can i give so that dynamic value can be substituted in my query.
我正在执行这样的 select 查询:
EXEC SQL
SELECT * FROM TABLE WHERE CONTRACT_NUM = :WS_CONTRACT_NUM
END-EXEC
提前致谢!
PIC X为任意字符符号。所以 PIC X(5)9(10)
.
除非你需要做算术,否则你可以不用 PIC X(15)
。仅仅因为某些东西被称为 "Number" 并不意味着它必须作为计算存储。将名为 "Number" 的字段存储为字符数据通常效率更高。例如 Social Insurance Number - 很少需要加 1 或除以 2,因此您可以将该字段视为 PIC X。
或者为了在这种情况下更加清晰:
01 ws-contract-value.
05 first-part pic x(5).
05 contract-number pic 9(10). *> or x(10) unless you need to do math
如果需要验证字符数据是否全部为数字,可以使用IF field IS NUMERIC ...
验证PIC X字段
您正在寻找 SQL 个赞,请参阅 IBM docs,其中
The underscore character (_) represents any single character.
The percent sign (%) represents a string of zero or more characters.
要在 COBOL 中使用它,您可以
MOVE '_____9999999999' TO WS_CONTRACT_NUM
EXEC SQL
SELECT * FROM TABLE WHERE CONTRACT_NUM LIKE :WS_CONTRACT_NUM
END-EXEC
或(您不太可能想要这样做)
EXEC SQL
SELECT * FROM TABLE WHERE CONTRACT_NUM LIKE '%9999999999'
END-EXEC
或者也许(我没有办法测试这个,请反馈)
MOVE '%9999999999' TO WS_CONTRACT_NUM
*> this may search for the trailing spaces,
*> if it does define a smaller variable
EXEC SQL
SELECT * FROM TABLE WHERE CONTRACT_NUM LIKE :WS_CONTRACT_NUM
END-EXEC
我在工作存储部分有一个字段 WS_CONTRACT_NUM ,它有几个硬编码值 leght 15 characters.But 前 5 个字符可以是任何东西,我的问题是我如何声明这个变量在那种情况下。
WORKING STORAGE
01 WS_CONTRACT_NUM PIC X(15) VALUE '?????9999999999' --- > instead of '?' what can i give so that dynamic value can be substituted in my query.
我正在执行这样的 select 查询:
EXEC SQL
SELECT * FROM TABLE WHERE CONTRACT_NUM = :WS_CONTRACT_NUM
END-EXEC
提前致谢!
PIC X为任意字符符号。所以 PIC X(5)9(10)
.
除非你需要做算术,否则你可以不用 PIC X(15)
。仅仅因为某些东西被称为 "Number" 并不意味着它必须作为计算存储。将名为 "Number" 的字段存储为字符数据通常效率更高。例如 Social Insurance Number - 很少需要加 1 或除以 2,因此您可以将该字段视为 PIC X。
或者为了在这种情况下更加清晰:
01 ws-contract-value.
05 first-part pic x(5).
05 contract-number pic 9(10). *> or x(10) unless you need to do math
如果需要验证字符数据是否全部为数字,可以使用IF field IS NUMERIC ...
验证PIC X字段
您正在寻找 SQL 个赞,请参阅 IBM docs,其中
The underscore character (_) represents any single character. The percent sign (%) represents a string of zero or more characters.
要在 COBOL 中使用它,您可以
MOVE '_____9999999999' TO WS_CONTRACT_NUM
EXEC SQL
SELECT * FROM TABLE WHERE CONTRACT_NUM LIKE :WS_CONTRACT_NUM
END-EXEC
或(您不太可能想要这样做)
EXEC SQL
SELECT * FROM TABLE WHERE CONTRACT_NUM LIKE '%9999999999'
END-EXEC
或者也许(我没有办法测试这个,请反馈)
MOVE '%9999999999' TO WS_CONTRACT_NUM
*> this may search for the trailing spaces,
*> if it does define a smaller variable
EXEC SQL
SELECT * FROM TABLE WHERE CONTRACT_NUM LIKE :WS_CONTRACT_NUM
END-EXEC