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…

     

如果這文章對你有幫助,請掃左上角微信支付-支付寶,給於打賞,以助博客運營