DB2 V9.7 for Linux, UNIX, and Windows

方案:使用隐式隐藏列的乐观锁定

下列方案说明如何在应用程序中使用隐式隐藏列实施乐观锁定,隐式隐藏列是使用 IMPLICITLY HIDDEN 属性定义的列。

对于这些方案,假定定义的 SALARY_INFO 表包含三列,并且第一列是隐式隐藏的 ROW CHANGE TIMESTAMP 列,始终会生成该列的值。
情况 1:
在以下语句中,列列表中显式引用隐式隐藏列,并且在 VALUES 子句中提供了该列的值:
    INSERT INTO SALARY_INFO (UPDATE_TIME, LEVEL, SALARY)
      VALUES (DEFAULT, 2, 30000)
情况 2:
以下 INSERT 语句使用隐式列列表。隐式列列表不包含隐式隐藏列,因此,VALUES 子句只包含其他两列的值:
    INSERT INTO SALARY_INFO
      VALUES (2, 30000)
在本示例中,必须将列 UPDATE_TIME 定义为具有缺省值,并将该缺省值用于插入的行。
情况 3:
在以下语句中,选择列表中显式引用隐式隐藏列,并且该列的值出现在结果集中:
    SELECT UPDATE_TIME, LEVEL, SALARY FROM SALARY_INFO
      WHERE LEVEL = 2
      
      UPDATE_TIME        LEVEL    SALARY
      -------------------------- ----------- -----------
      2006-11-28-10.43.27.560841      2    30000
情况 4:
在以下语句中,列列表是通过使用 * 表示法隐式生成的,并且隐式隐藏列不出现在结果集中:
    SELECT * FROM SALARY_INFO
      WHERE LEVEL = 2
      
      LEVEL    SALARY
      ----------- -----------
           2    30000
情况 5:
在以下语句中,列列表是通过使用 * 表示法隐式生成的,并且通过使用 ROW CHANGE TIMESTAMP FOR 表达式隐式隐藏列值也会显示:
    SELECT ROW CHANGE TIMESTAMP FOR SALARY_INFO
      AS ROW_CHANGE_STAMP, SALARY_INFO.*
            FROM SALARY_INFO WHERE LEVEL = 2
结果表将类似于情况 3(列 UPDATE_TIME 将为 ROW_CHANGE_STAMP)。