TXSeries入门系列文章7

http://www-01.ibm.com/support/knowledgecenter/SSAL2T_8.1.0/com.ibm.cics.tx.doc/reference/r_readprev.html?lang=en

关于RESETBR

http://www-01.ibm.com/support/knowledgecenter/SSAL2T_8.1.0/com.ibm.cics.tx.doc/reference/r_resetbr.html?lang=en

关于ENDBR

https://www.ibm.com/support/knowledgecenter/SSAL2T_8.1.0/com.ibm.cics.tx.doc/reference/r_endbr.html

3)更新记录

阅读了上面提供的READ命令的内容后,用户可能会注意到UPDATE选项。READ命令可以帮助我们更新记录,这跟SDT命令(参考有关”cicssdt“的内容)相似,但是它们的用法非常不同。

为了更新一条记录,用户可以通过使用READ命令加UPDATE选项来指定哪条记录会被更新,原始的记录也可以同时被检索。

语法

READ FILE(“<FD entry>”) INTO(<targetAddress>) RIDFLD(<recordIndex>) UPDATE

然后用户可以通过”memcpy“(推荐在memcpy之前使用memset将所有字节设置为‘\0’,这样可以避免旧记录中的意外数据的影响)修改targetAddress中的数据。

现在是时候通过REWRITE命令来更新记录了。

语法

REWRITE FILE(“<FD entry>”) FROM(<recordToWrite>)

选项

<recordToWrite> :           用于更新的记录的地址。

可以看到,REWRITE命令不能识别哪个记录会被更新,因为RIDFLD选项不被支持。所以REWRITE必须紧跟READ命令加UPDATE选项,否则将返回”INVREQ“。

下面是一个更新记录的例子。

源代码:

char index[3]=”3″ //id=3的记录将会被更新

EXEC CICS READ FILE(“myFile”) INTO(&record) RIDFLD(index) UPDATE;

//读取id=3的记录,并指定此条记录将被更新

memset(record.name,’\0′,10);

memcpy(record.name,”Jack”,4); //修改记录中的数据

//rewirte/update the record to file

EXEC CICS REWIRTE FILE(“myFile”) FROM(&record); //将修改后的记录写入文件

参阅:

关于更新记录:

http://www-01.ibm.com/support/knowledgecenter/SSAL2T_8.1.0/com.ibm.cics.tx.doc/tasks/t_updatng_records.html?lang=en

关于REWRITE

http://www-01.ibm.com/support/knowledgecenter/SSAL2T_8.1.0/com.ibm.cics.tx.doc/reference/r_rewrite.html?lang=en

4)写入记录

WRITE命令可以在被RIDFLD指定的位置添加记录。对于一个KSDS文件,新记录的索引值和RIDFLD值必须相同。

语法

WRITE FILE(“<FD entry>”) FROM(<recordToWrite>) RIDFLD(<recordIndex>)

选项

<recordToWrite> :           将要被添加的记录的地址

<recordIndex> :               这个值必须和记录中的索引值一样。

现在尝试向文件中添加记录。

源代码

char index[3]=”2″; //记录将被添加到第二个位置

memcpy(record.id,”2″,1);

//索引值(record.id)和recordIndexchar index[3])必须相同

memcpy(record.name,”Lisa”,4);

memcpy(record.age,”17″,2);

EXEC CICS WRITE FILE(“myFile”) FROM(&record) RIDFLD(index);

如果在WRITE命令后检查文件内容,用户将发现一条记录被插入到文件的第二个位置。

参阅:

http://www-01.ibm.com/support/knowledgecenter/SSAL2T_8.1.0/com.ibm.cics.tx.doc/reference/r_write.html?lang=en

5)删除记录

有两种方法可以删除记录。一种是直接通过指定RIDFLD来删除,另一种类似于更新数据,使用READ命令加UPDATE选项,然后运行DELETE命令而不加RIDFLD

a.直接删除

语法

DELETE FILE(“<FD entry>”) RIDFLD(<recordIndex>)

需要指定一个已存在的索引,否则会收到”NOTFND“。

b.使用READ命令

首先,指定一个要被READ命令删除的记录。

语法

READ FILE(“<FD entry>”) INTO(<targetAddress>) RIDFLD(<recordIndex>) UPDATE

接下来,使用DELETE命令删除这条记录。

语法

DELETE FILE(“<FD entry>”)

DELETE命令相当简单,用户可以阅读参考资料并亲自尝试一下。

参阅:

http://www-01.ibm.com/support/knowledgecenter/SSAL2T_8.1.0/com.ibm.cics.tx.doc/reference/r_delete.html?lang=en

3. 练习

1)在默认SFS服务器中使用下列数据创建一个名为”ksdsFile“的KSDS文件,设置id为唯一的主索引和索引域,记录升序存储。使用”info“检查文件信息。


2)使用”cicssdt“顺序读取记录,并在逐条读取时将Anna的生日改为1995.03.05

3)使用”cicssdt“添加一条新记录:

id=5name=Kristoffbirthday=1991.10.22tel:010-64791234

4)向region RGN1 添加一个FD,名为file1. 编写一个程序直接读取id=2的记录,然后以5-4-2-2-4 1-2的次序读取记录(需要将索引重设为1)。

5)编写一个程序来添加一条记录:id=3name=Olafbirthday=2014.02.05Tel=86-18643214321

6)编写一个程序为Elsa更新tel=86-8912344321

7)编写一个程序删除Hans的记录。

4. 答案

1)在默认SFS服务器中使用下列数据创建一个名为”ksdsFile“的KSDS文件,设置id为唯一的主索引和索引域,记录升序存储。使用”info“检查文件信息。

查看Unit3/Part1 File/exercics1.txt中的操作记录。

2)使用”cicssdt“顺序读取记录,并在逐条读取时将Anna的生日改为1995.03.05

查看Unit3/Part1 File/exercics2.txt中的操作记录。

3)使用”cicssdt“添加一条新记录:

id=5name=Kristoffbirthday=1991.10.22tel:010-64791234

查看Unit3/Part1 File/exercics3.txt中的操作记录。

4)向region RGN1 添加一个FD,名为file1. 编写一个程序直接读取id=2的记录,然后以5-4-2-2-4 1-2的次序读取记录(需要将索引重设为1)。

#cicsadd -c fd -r RGN1 file1 RSLKey=public BaseName=ksdsFile IndexName=id

FileServer=”/.:/cics/sfs/OceanLinux64″

查看Unit3/Part1 File/ReadAndBrowse.ccs中的源代码。

5)编写一个程序来添加一条记录:id=3name=Olafbirthday=2014.02.05Tel=86-18643214321

查看Unit3/Part1 File/Add.ccs中的源代码。

6)编写一个程序为Elsa更新tel=86-8912344321

查看Unit3/Part1 File/Update.ccs中的源代码。

7)编写一个程序删除Hans的记录。

查看Unit3/Part1 File/Delete.ccs中的源代码。

TXSeries入门系列文章单元三
数据管理
二部分 DB2

三单元 数据管理

以下文章点击率最高

Loading…


发表评论

电子邮件地址不会被公开。 必填项已用*标注