COBOL-DB2程序中“ FOR UPDATE OF”子句的目的和用途是什么
问题:游标中“FORUPDATEOF”子句的目的是什么?如果在COBOL-DB2程序中不使用此子句就触发UPDATE语句,将会发生什么情况?
解
游标声明中提供了“FORUPDATEOF”子句,当我们要更新表时使用它。所有需要更新的列都应在游标声明中给出。
一旦打开游标,“FORUPDATEOF”子句将在所有符合条件的行上放置排他锁。我们也可以不使用“FORUPDATECLAUSE”来更新表,但是在那种情况下,仅当执行UPDATE查询时,排他锁才会放在行上。例如-如果我们想更新所有ORDER_DATE为2020年9月15日的条目的ORDERS表,那么我们将编写如下的更新游标。
示例
EXEC SQL DECLARE ORDER_CUR CURSOR WITH HOLD FOR SELECT * FROM ORDERS WHERE ORDER_DATE = ‘2020-09-15’ FOR UPDATE OF ORDER_TOTAL, ORDER_STATUS END-EXEC
此查询将对ORDERS表的所有行(具有ORDER_DATE的日期为2020年9月15日)施加排他锁。但是,如果我们要更新此表的所有列,则不必在“FORUPDATE”中提供任何列名。OF”子句。
也可以声明一个SELECT游标,并一次对一行使用UPDATE查询。但是在这种情况下,一旦执行UPDATE查询,排他锁将一次仅放置在一行上。