为什么Oracle SQL Developer使用这种奇怪的删除标准?

时间:2015-03-17 03:42:20

标签: oracle oracle-sqldeveloper

在网格视图中删除行时,消息面板指示SQL Developer发出此删除命令。

DELETE FROM "MH"."T" WHERE ROWID = 'AABUG+AAEAAEZtrAAA'
                       AND ORA_ROWSCN = '1220510600909'
                       and ( "A" is null or "A" is not null )

似乎指定ROWID应该足以识别行,所以

  • 为什么指定ORA_ROWSCN?
  • 更令人迷惑的是,为什么是null / not null子句?

1 个答案:

答案 0 :(得分:6)

ROWID只是行的物理地址。如果删除了一行并插入了另一行,则新行可能与旧行具有相同的ROWID。如果行中的数据已被修改,则其ROWID也可能已更改。 ORA_ROWSCN条件确保这些都没有发生过。它还允许SQL Developer在您读取数据时提醒您其他会话是否已修改数据,以便您确认仍要删除该行。

我对A is null or A is not null谓词添加的内容感到茫然。如果它是第一个谓词,我猜这是标准的1 = 1谓词,人们有时会添加到动态构建的查询中,以简化动态构建SQL语句的过程。但这并不适合它作为查询中的最后一个谓词。 A是表的主键吗?