有个特殊场景,有人想用select max(id)+1 from emp for update 得到新ID,当时还未执行此句,一群人针对此语句是锁行还是锁表争论了一会,准备做个实验验证一下,结果出现ORA-01786错误:
SQL> select max(id) from emp for update; select max(id) from emp for update * 第 1 行出现错误: ORA-01786: 此查询表达式不允许 FOR UPDATE SQL> select max(id)+1 from emp for update; select max(id)+1 from emp for update * 第 1 行出现错误: ORA-01786: 此查询表达式不允许 FOR UPDATE
看来Oracle对此早有准备,对于聚组函数(集计函数)的查询不允许跟 for update。
END