Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

7.106.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行目の明細行の書き込み中にこのファンクションが失敗した場合、自動ロールバックが実行されます。これにより、注文の頭書きと作成済みのすべての明細行がファイルでロールバックされます。 MESSAGE    MSGTXT('Order has been commited to the database') ELSE ROLLBACK MESSAGE    MSGTXT('Order has been removed from the database') ENDIF   (例えば) 4行目の明細行の書き込み中にこのファンクションが失敗した場合、自動ロールバックが実行されます。これにより、注文の頭書きと作成済みのすべての明細行がファイルでロールバックされます。