COBOL中将DB2表数据写入平面文件的相关疑问咨询
COBOL复制DB2表数据到平面文件的疑问解答
问题1:直接SELECT写入 vs 必须使用游标?
- 如果DB2表只有一行数据,可以直接用
SELECT ... INTO ... FROM 表名的方式把数据取到COBOL变量里,再写入平面文件,完全可行。 - 但如果表有多行数据,直接用这种非游标SELECT会触发SQL错误(SQLCODE -811),因为该语句仅能处理单条返回结果。这种情况下必须用游标:先声明游标定义查询,打开游标后循环
FETCH每一行数据到变量,写入文件,直到没有更多数据(SQLCODE 100)再关闭游标。
你之前尝试的直接SELECT如果能正常运行,说明目标表当时只有一行数据;如果表有多行,就会报错,这时候就得改用游标方案。
问题2:是否可以不带WHERE子句?
完全可以,不管是单条SELECT还是游标声明里的SELECT语句,都允许省略WHERE子句。不带WHERE的话会返回表中所有行数据,语法上没有任何问题。不过如果表数据量特别大,要考虑程序的处理性能和运行时间,但这属于优化范畴,不影响语法合法性。
补充:游标处理多条数据的大致代码框架示例
* 声明游标 EXEC SQL DECLARE CURSOR1 CURSOR FOR SELECT COL1, COL2, COL3 FROM YOUR_DB2_TABLE END-EXEC. * 打开游标 EXEC SQL OPEN CURSOR1 END-EXEC. * 循环读取并写入文件 PERFORM UNTIL SQLCODE = 100 EXEC SQL FETCH CURSOR1 INTO :WS-COL1, :WS-COL2, :WS-COL3 END-EXEC. IF SQLCODE = 0 WRITE OUTPUT-RECORD FROM WS-RECORD END-IF END-PERFORM. * 关闭游标 EXEC SQL CLOSE CURSOR1 END-EXEC.
内容的提问来源于stack exchange,提问作者Rekha
相关产品推荐
相关产品推荐

