3.CICS编程基础 Part 2

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

35
添加数据库数据记录
36
添加多条数据库数据记录
WORKING-STORAGE SECTION.
1
EXEC SQL DECLARE DEPTA00 TABLE (EMPNIMBER CHAR(6) NOT NULL, FNAME VCHAR(12) NOT NULL, LNAME VCHAR(12) NOT NULL, HRDATE DATE ) … EXEC SQL DECLARE TEMPL TABLE (EMPNO CHAR(6) NOT NULL, …. PROCEDURE DIVISION.
19 19
数据库存取的程序组织
数据库存取程序 的组织结构如右 图所示:
图中需要注意: 由程序使用的表和视图必须先要在工作存储节中声明。 SQLCA用来与SQL语句执行的结果进行通信。 Data Division中的工作存储节和连接节中定义Host Variables,用来存放获取的 关系数据。 COBOL程序中的SQL语句都以EXEC SQL开头,以END-EXEC结束。
2
数据访问功能总揽
3
程序结构
4
文件相关命令
5
READ File命令
6
Read command
EXEC CICS READ FILE(name) INTO(data-area) RIDFLD(data-area) | [RBA|RRN] [LENGTH(data-area)] [SET(ptr-ref)[ [GENERIC][KEYLENGTH(data-value)] [GTEQ|EQUAL]|[UPDATE] END-EXEC
28
游标的定义及使用
29
数据库数据更新
上图是更新数据库记录的方法
30
数据库数据更新
31
数据库数据更新例子
MOVE value TO EMPNO. MOVE value TO WORKDEPT. EXEC SQL UPDATE TEMPL SET MIDINIT = 'M' WORKDEPT = :WORKDEPT WHERE EMPNO = :EMPNO END-EXEC. … MOVE value TO JOBCODE. EXEC SQL UPDATE TEMPL SET JOBCODE = :JOBCODE WHERE EDUCLVL = 16 END-EXEC. IF SQLCODE IS NOT EQUAL TO ZERO IF SQLCODE = 100 PERFORM NOT-FOUND ELSE PERFORM OTHER-ERROR.
The write command writes a record to a VSAM KSDS, ESDS OR RRDS.
14
EXEC CICS DELETE FILE(name) [RIDFLD(data-area)] [KEYLENGTH(data-value)] [GENERIC [NUMREC(data-area)]] [RBA|RRN] END-EXEC
13
WRITE command
EXEC CICS WRITE FILE(name) FROM (data-area) [LENGTH (data-value)] RIDFLD(data-area) [RBA|RRN] [MASSINSERT] END-EXEC
在文件中添加记录需要以下三个步骤:
建立新记录的数据值; 将主键值赋给RIDFLD字段; 写入新记录。
32
删除数据库数据记录
33
添加数据库数据记录
34
添加数据库数据记录
插入命令可以一次插入多个记录,也可以 一次插入一行。
在插入单个记录时需要指定各字段的值; 如果要插入多个记录时,必须包含一个SELECT语句来 指定另一个关系表中的数据作为插入的记录。 系统在处理时,先判断是否插入单个记录,若是,执 行单个插入;若不是,从指定关系表中取出相应行插 入。
cicsdb2连接的基本属性例如连接的db2子系统的名称或者组名tcb同时并发的最大数保留的线程最长时间等command的线程属性例如command的线程同时并发的最大数db2授权的类型等等pool的线程属性例如pool的线程同时并发的最大数db2授权的类型plan的名称等等40cicsdb2连接的定义?2
DELETE command
只能删除KSDS和RRDS的记录 若记录在请求删除前正在被意向更新读,则 RIDFLD不指定。 使用GENERIC,则要给出KEYLENGTH,同时 NUMREC指出要删除的记录条数。 RRN: RRDS should be delete。 RBA:RIDFLD option should be interpreted as a relative byte address for a KSDS
11
Browse
每次browse后,key field会被更新成当前 retrieved record的key End-of-file occurs:
READNEXT读到了文件的最后一条记录 READPREV读到了文件的第一条记录
12
File update (REWRITE)
EXEC CICS REWRITE FILE(name) FROM (data-area) [RESP(RESPONSE-CODE)] END-EXEC REWRITE is only valid after a READ UPDATE command. The key field in the record cannot be changed. Because CICS programs are pseudo-conversational, you don’t usually read a record for update, change it and rewrite it within a single execution of the program.
17 17
外部条件
注意:
一个文件不能同时在CICS和CICS外同时打开。 要在DITTO中查看,则在CICS中先关闭: CEMT S FILE(FILEA) CLOSE 再次在CICS中使用则先打开: CEMT S FILE(FILEA) OPEN
18
CICS对数据库的处理
DB2 关系数据库 数据库数据查询 数据库数据更新 添加数据库数据记录 删除数据库数据记录
8
BROWSE File command
9
VSAM Browse
A browse operation consists of three steps:
- STARTBR:指定读取记录的位置,本身并不读
取记录。
- READNEXT/READPREV:升降序读取记录 - ENDBR:中止浏览操作
10
File(name): 要查询的文件名字,要在CICS FCT里定义. INTO(data-area): 接受数据的工作区。 LENGTH(data-larea):存放读取记录的长度,读完,里面放的是实际读取的 记录长度。 RIDFLD(data-area): For KSDS, it contains the key of the record to be read, IF RRN or RBA is specified, this field is interpreted as a RRN or a RBA. KEYLENGTH(data-value): KEY 的长度。 RBA/RRN:指明前面给的RIDFLD是个RBA/RRN GENERIC选项只对键值的一部分进行匹配,在这种情况下必须说明 KEYLENGTH选项,以对多少位的键值需要匹配进行说明。 GTEQ选项,即它的KEY值“大于或等于” UPDATE: The record will be reserved by your task until a REWIRETE, DELETE, OR UNLOCK COMMAND or until your task ends.
Action可以是
CONTINUE GO TO label.
当SQLCODE小于0时,表示DB2在处理查询 时发现了错误。
25
选择多条记录
26
读取多条数据库记录
前面说明的是读取单条记录的方法, SQL中提供了一 种称为游标(Cursor)的机制实现应用程序同时能读 取一组记录。 原理:
SQL首先建立了一个结果表,用来放所有被读取的记录; 然后用游标标明结果表中的当前记录。这样,应用程 序就可以通过游标,在结果表中顺序地检索每一个记 录了。 要指出的是,在一个结果表中,记录的条数可以是一 条或多条,也可以为零。
7
读取VSAM数据例子
WORKING-STORAGE SECTION. 05 RECL PIC S9(4) COMP. 05 RECKEY PIC X(6). … PROCEDURE DIVISION. … MOVE 80 TO RECL. MOVE VALUE TO RECKEY. EXEC CICS READ FILE(‘FILEA’) INTO(FILEREC) RIDFLD(RECKEY) LENGTH(RECL) END-EXEC.
CICS高级编程技术
CICS处理VSAM文件 CICS对DB2的操作 CICS的队列设施 CICS程序到程序的控制
1
CICS处理VSAM文件
VSAM READ FILE RECORD BROWSE FILE RECORD REWRITE FILE RECORD INSERT FILE RECORD DELETE FILE RECORD
27
读取多条数据库记录
如何使用游标,游标的操作步骤:
游标的定义:必须在DECLARE语句中定义,同时 该句还需要包含一个SELECT语句。 游标的打开:必须用OPEN语句打开。 游标的检索:使用FETCH语句可通过一个打开的游 标在结果表中读取一个记录。 游标的关闭:使用CLOSE语句将终止游标的处理过 程,或者当该任务终止时,游标也将被自动关闭。20ຫໍສະໝຸດ 在CICS程序中嵌入SQL
21
数据库查询
EXEC SQL SELECT INTO FROM WHERE END-EXEC 字段名 宿主变量 表名 搜索条件
22
数据库查询
23
数据库查询
处理异常情况有两种方法: 在每个SELECT语句后加上条件测试,如测 试是否找到就用IF SQLCODE=100来实现。 EXEC SQL 在SELECT语句之前加上WHENEVER语句。 WHENEVER NOT FOUND GO TO … WHENEVER 语句的语法如下: END-EXEC
15
文件异常处理
16
File Exception Condition
应用程序出错
FILENOTFOUND:文件名在FCT中找不到 ILLOGIC:不包含在其他CICS响应类别中的VSAM错误 LENGERR 将要写入的记录长度没有指定或太长; INVREQ 非法请求,多由以下原因所致:在重写入一个记录 前没有运行过READ UPDATE命令;或者,在一个READ UPDATE发出的更新请求没有执行完之前又有一个READ UPDATE请求对同一个文件进行操作; IOERR:不在其他CICS非正常情况中的特殊事件 DISABLED:文件被禁用,很可能因为预先企图打开已失败 NOTOPEN:文件已关闭 NOSPACE 即文件没法再放在它原先的那部分空间,与读取 数据相比,这种异常只在更新时才会发生 ;多是由两种原 因所致 ;
VSAM Browse
… MOVE value TO RECKEY. EXEC CICS STARTBR FILE(‘FILEA’) RIDFLD(RECKEY) RESP(ERR-CODE) END-EXEC. IF ERR-CODE EQUAL DFHRESP(NORMAL) PERFORM UNTIL ERR-CODE EQUAL DFHRESP(ENDFILE) EXEC CICS READNEXT FILE(‘FILEA’) INTO(FILEREC) RIDFLD(REKEY) RESP(ERR-CODE) END-EXEC … END-PERFORM EXEC CICS ENDBR FILE(‘FILEA’) END-EXEC ELSE …
EXEC SQL WHENEVER condition action END-EXEC

24
Handling Exception
其中的condition条件可以使三种:
SQLWARNING:即除100以外的正整数 SQLERROR: SQLCODE为负值。 NOT FOUND:即SQLCODE为100
相关文档
最新文档