oracle - 为什么 Oracle SQL Developer 使用如此奇怪的删除标准?

标签 oracle oracle-sqldeveloper

在 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/

相关文章:

java - ROW_NUMBER() 没有正确排序记录

oracle - 在Oracle SQL Developer上同时运行2个查询?

java - Oracle 10g 在日期中接受 5 位数年份

SQL Developer选项卡问题

SQL 查询以查找所有可能的路径

SQL (Oracle) - 如何从两个计数语句中获取比率?

mysql - sql语句中列的顺序会影响查询速度吗?

mysql - SQL查询: Need to output two columns with values based on conditional data

oracle-sqldeveloper - 可插拔数据库不存在

sql - Oracle中语句的最大长度是多少