我在MicroFocus COBOL中有以下代码:
move 'select * from TABLE where a = ? and b = ? and c = ? to w-sql
exec sql
open cur_read_2 using :w-a,
:w-b,
:w-c
end-exec
但是此选择可以是可变的,因此这里仅作为示例
... where a = ? ...
或
... where a = ? and c = ? ...
那么,我可以以某种方式动态设置exec-sql部分,以在此处拥有适当数量的主机变量吗?在实际情况下,我有7个WHERE变量,并且可能有完整的组合列表。
答案 0 :(得分:0)
分析此示例。也许可以帮助您。
WORKING STORAGE SECTION.
*VARIABLE COMMAND
01 DSTRING.
02 STR-LEN PIC S9(04) COMP VALUE +200
02 STR-TEXT PIC X(200).
01 W-ABC.
03 W-A-FROM PIC 99 VALUE 0.
03 W-A-TO PIC 99 VALUE 99.
03 W-B-FROM PIC XX VALUE LOW-VALUES.
03 W-B-TO PIC XX VALUE HIGH-VALUES.
03 W-C-FROM PIC 99 VALUE 0.
03 W-C-TO PIC 99 VALUE 99.
*DECLARE CURSOR
EXEC SQL
DECLARE CURSOR1 CURSOR
FOR STMT1
END-EXEC.
PROCEDURE DIVISION.
MOVE 'TABLE' TO TS-TABLA.
* YOU MUST MOVE THE VALUE THAT CORRESPONDS TO THE VARIABLE TO USE.
* THE VARIABLE THAT IS NOT USED IS LEFT WITH THE DEFAULT VALUE
*
MOVE W-INPUT-A TO W-A-FROM.
MOVE W-INPUT-A TO W-A-TO.
* THE W-B VARIABLE IS NOT USED. LEFT WITH THE DEFAULT VALUE.
MOVE W-INPUT-C TO W-C-FROM.
MOVE W-INPUT-C TO W-C-TO.
*OPEN CURSOR
MOVE SPACES TO STR-TEXT
STRING ‘SELECT * FROM’
‘ ‘ DELIMITED BY SIZE
TS-TABLA DELIMITED BY SPACE
‘ ‘ DELIMITED BY SIZE
‘WHERE’ DELIMITED BY SIZE
‘ ‘ DELIMITED BY SIZE
‘A’ DELIMITED BY SIZE
‘ ‘ DELIMITED BY SIZE
‘BETWEEN ?’ DELIMITED BY SIZE
‘ ‘ DELIMITED BY SIZE
‘AND ?’ DELIMITED BY SIZE
‘ ‘ DELIMITED BY SIZE
‘AND’ DELIMITED BY SIZE
‘ ‘ DELIMITED BY SIZE
‘B’ DELIMITED BY SIZE
‘ ‘ DELIMITED BY SIZE
‘BETWEEN ?’ DELIMITED BY SIZE
‘ ‘ DELIMITED BY SIZE
‘AND ?’ DELIMITED BY SIZE
‘AND’ DELIMITED BY SIZE
‘ ‘ DELIMITED BY SIZE
‘C’ DELIMITED BY SIZE
‘ ‘ DELIMITED BY SIZE
‘BETWEEN ?’ DELIMITED BY SIZE
‘ ‘ DELIMITED BY SIZE
‘AND ?’ DELIMITED BY SIZE
‘ ‘ DELIMITED BY SIZE
‘ORDER BY’ DELIMITED BY SIZE
‘ ‘ DELIMITED BY SIZE
‘CODIGO’ DELIMITED BY SIZE
INTO STR-TEXT.
*OPEN CURSOR (cont)
EXEC SQL
PREPARE STMT1 FROM :DSTING
END-EXEC.
EXEC SQL
OPEN CURSOR1 USING :WS-CODIGO-SQL
END-EXEC.