COBOL-数据库接口

本文概述

  • 嵌入式SQL
  • DB2应用程序编程
  • 主机变量
  • SQLCA
  • 游标
在COBOL中, 程序与DB2数据库进行交互。 DB2是由IBM开发的Data Base2。它是一个关系数据库。以TABLE格式存储的关系数据, 其中包含元组(行)和属性(列)。
DB2与SQL类似, 但具有一些高级功能, 主要用于存储大量的Mainframe应用程序数据。
在数据库接口的上下文中, COBOL包括以下术语:
  • 嵌入式SQL
  • DB2应用程序编程
  • 主机变量
  • SQLCA
  • SQL查询
  • 游标
嵌入式SQLCOBOL使用嵌入式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 SQLINCLUDE table-nameEND-EXEC.EXEC SQL BEGIN DECLARE SECTIONEND-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 SECTIONEND-EXEC.

SQLCASQLCA是一个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 SQLDECLARE STUDCUR CURSOR FORSELECT STUDENT-ID, STUDENT-NAME, STUDENT-ADDRESS FROM STUDENTWHERE STUDENT-ID > :WS-STUDENT-IDEND-EXEC.

打开
在使用游标之前, 应执行Open语句。 Open语句准备执行SELECT。
语法如下:
EXEC SQLOPEN STUDCUREND-EXEC.


【COBOL-数据库接口】close语句用于释放游标占用的所有内存。在结束程序之前, 应关闭游标。
语法如下:
EXEC SQLCLOSE STUDCUREND-EXEC.


Fetch语句用于标识游标, 并将值放在INTO子句中。当我们一次获取一行时, Fetch语句将在循环中进行编码。
语法如下:
EXEC SQLFETCH STUDCURINTO :WS-STUDENT-ID, :WS-STUDENT-NAME, WS-STUDENT-ADDRESSEND-EXEC.

    推荐阅读