本文概述
在COBOL中, 程序与DB2数据库进行交互。 DB2是由IBM开发的Data Base2。它是一个关系数据库。以TABLE格式存储的关系数据, 其中包含元组(行)和属性(列)。
DB2与SQL类似, 但具有一些高级功能, 主要用于存储大量的Mainframe应用程序数据。
在数据库接口的上下文中, COBOL包括以下术语:
- 嵌入式SQL
- DB2应用程序编程
- 主机变量
- SQLCA
- SQL查询
- 游标
嵌入式SQL
COBOL使用嵌入式SQL语句执行标准SQL操作。在编译应用程序之前, 这些语句将由SQL处理器进行预处理。
COBOL是主机的语言。 COBOL-DB2应用程序包括DB2和COBOL。
嵌入式SQL语句的工作方式与普通SQL(结构化查询语言)语句类似, 但有一些细微的变化。例如, 查询的输出将定向到一组预定义的变量, 这些变量称为”主机变量”。 SELECT语句中放置了一个额外的INTO子句。
DB2应用程序编程
以下是编码COBOL-DB2程序时要遵循的规则:
- 必须将所有SQL语句括在EXEC SQL和ENDEXEC之间。
- SQL语句必须在区域B中编码。
- 程序的所有表都必须在INCLUDE语句的”工作存储”部分中定义。
- 除INCLUDE和DECLARE TABLE之外的所有SQL语句都必须显示在Procedure Division中。
主机变量
在COBOL程序中指定的数据项是主机变量。主机变量接受表的数据或将数据插入表中。这些变量用于从数据库传输值并检索它们。
你可以在COBOL程序的”文件”部分, “本地存储”部分, “链接”部分或”工作存储”部分中分配主机变量, 并且其级别号介于1到48之间。级别49保留用于VARCHAR数据项。
宿主变量不能是组项目, 但是在宿主结构中, 可以将它们分组。无法重新定义或重命名它们。
如果在嵌入式SQL语句中使用主机变量, 则必须使用冒号(:)指定数据项名称前缀。冒号(:)用于使编译器了解主机变量与具有相同名称的列/表之间的区别。
主机变量可以通过两种方式使用:
- 输入主机变量:用于定义将从COBOL程序传输到数据库的数据。
- 输出主机变量:用于保存从数据库返回到COBOL程序的数据。
语法如下:
DATA DIVISION.
WORKING-STORAGE SECTION.
EXEC SQL
INCLUDE table-name
END-EXEC.
EXEC SQL BEGIN DECLARE SECTION
END-EXEC.
01 STUDENT-REC.
05 STUDENT-ID PIC 9(4).
05 STUDENT-NAME PIC X(25).
05 STUDENT-ADDRESS X(50).
EXEC SQL END DECLARE SECTION
END-EXEC.
SQLCA
SQLCA是一个SQL通信区域, DB2在其中将SQL执行反馈传递到程序中。 SQLCA是一组变量, 将在每个SQL语句执行结束时进行更新。具有可执行SQL语句的程序可以提供一个, 但不超过一个SQLCA。
它只是告诉程序执行是否成功。 SQLCA下有几个预定义的变量, 例如SQLCODE, 其中包含错误代码。 SQLCODE中的值” 000″指定成功执行。
语法如下:
以下是在”工作存储”部分中声明SQLCA的语法:
DATA DIVISION.
WORKING-STORAGE SECTION.
EXEC SQL
INCLUDE SQLCA
END-EXEC.
游标
DB2支持一种称为游标的机制。游标用于处理表中的一组行。它一次处理多个行选择。游标是保存查询所有结果的数据结构。
我们可以在工作存储区或过程分区中定义光标。以下是与游标相关的操作:
- 删除
- 打开
- 关
- 取
声明游标
游标声明可以在”工作存储”部分或过程分区中进行。第一条语句是DECLARE语句, 这是一个不可执行的语句。
语法如下:
EXEC SQL
DECLARE STUDCUR CURSOR FOR
SELECT STUDENT-ID, STUDENT-NAME, STUDENT-ADDRESS FROM STUDENT
WHERE STUDENT-ID >:WS-STUDENT-ID
END-EXEC.
打开
在使用游标之前, 应执行Open语句。 Open语句准备执行SELECT。
语法如下:
EXEC SQL
OPEN STUDCUR
END-EXEC.
关
close语句用于释放游标占用的所有内存。在结束程序之前, 应关闭游标。
语法如下:
EXEC SQL
CLOSE STUDCUR
END-EXEC.
取
Fetch语句用于标识游标, 并将值放在INTO子句中。当我们一次获取一行时, Fetch语句将在循环中进行编码。
语法如下:
EXEC SQL
FETCH STUDCUR
INTO :WS-STUDENT-ID, :WS-STUDENT-NAME, WS-STUDENT-ADDRESS
END-EXEC.
评论前必须登录!
注册