个性化阅读
专注于IT技术分析

COBOL-数据库接口

本文概述

在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.

赞(0)
未经允许不得转载:srcmini » COBOL-数据库接口

评论 抢沙发

评论前必须登录!