7.104.2 ROLLBACK の使用例

注文の明細を入力するようユーザーに要求し、注文の頭書きと関連するすべての明細行をデータベースに書き込みます。注文を保管するかどうかをユーザーに問い合わせ、応答が[YES]でない場合は、注文をデータベースから削除します。

GROUP_BY   NAME(#ORDERHEAD) FIELDS(#ORDNUM #CUSTNUM #DATEDUE)
DEF_LIST   NAME(#ORDERLINE) FIELDS(#ORDLIN #PRODUCT #QUANTITY #PRICE)
DEFINE     FIELD(#CONFIRM) TYPE(*CHAR) LENGTH(3) LABEL('Confirm order :')
 
SET_MODE   TO(*ADD)
INZ_LIST   NAMED(#ORDERLINE) NUM_ENTRYS(20)
REQUEST    FIELDS(#ORDERHEAD) BROWSELIST(#ORDERLINE)
 
INSERT     FIELDS(#ORDERHEAD) TO_FILE(ORDHDR)
SELECTLIST NAMED(#ORDERLINE) GET_ENTRYS(*NOTNULL)
INSERT     FIELDS(#ORDERLINE) TO_FILE(ORDLIN)
ENDSELECT
 
REQUEST    FIELDS((#CONFIRM)(#ORDNUM *NOCHG))
 
IF         COND('#CONFIRM = YES')
COMMIT
MESSAGE    MSGTXT('Order has been commited to the database')
ELSE
ROLLBACK
MESSAGE    MSGTXT('Order has been removed from the database')
ENDIF
 

(例えば) 4行目の明細行の書き込み中にこのファンクションが失敗した場合、自動ロールバックが実行されます。これにより、注文の頭書きと作成済みのすべての明細行がファイルでロールバックされます。