在 GridView 中删除行时,消息面板会指示 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?
- 更令人困惑的是,为什么使用 is null/not null 子句?
最佳答案
ROWID
只是行的物理地址。如果删除一行并插入另一行,则新行可能与旧行具有相同的 ROWID
。如果行中的数据已被修改,则其 ROWID
也可能已更改。 ORA_ROWSCN
标准确保这两种情况实际上都没有发生。它还允许 SQL Developer 在您读取数据后是否有另一个 session 修改了该数据,从而向您发出警报,以便您确认是否仍要删除该行。
我不知道 A is null 或 A is not null
谓词将添加什么。如果它是第一个谓词,我猜它是标准的 1 = 1
谓词,人们有时会添加到动态构建的查询中,以简化动态构建 SQL 语句的过程。但这与它作为查询中的最后一个谓词不相符。 A
是表的主键吗?
关于oracle - 为什么 Oracle SQL Developer 使用如此奇怪的删除标准?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29090929/