我很难将我的 sybase 脚本转换为 Oracle 11g 脚本。我使用了翻译工具,但我对 Rowid 更加困惑。有没有更简单的方法可以在不使用 rowid 的情况下做到这一点,这样对于刚学习 Oracle 的我来说更容易消化?
这是我的 Sybase 脚本:
delete table_1
from table_1 a, table_2 b
where (select count(*) from table_2
where a.id = id
and a.seq = seq
and a.gcode = gcode
and a.gtype = gtype) = 0
and a.id = b.id
and a.seq = b.seq;
以下是 Oracle SQL 开发翻译工具的结果:
DELETE table_1
WHERE ROWID IN
( SELECT a.ROWID
FROM table_1 a,
table_2 b
WHERE ( SELECT COUNT(*)
FROM table_2
WHERE a.id = id
AND a.seq = seq
AND a.gcode = gcode
AND a.gtype = gtype ) = 0
AND a.id = b.id
AND a.seq = b.seq );
使用 ID 而不是 RowId 写入是否安全?: table_1 和 table_2 中的 ID 引用相同的 PK。Table_1 和 table_2 是彼此的镜像。
DELETE table_1
WHERE ID IN
( SELECT DISTINCT a.ID
FROM table_1 a,
table_2 b
WHERE ( SELECT COUNT(*)
FROM table_2
WHERE a.id = id
AND a.seq = seq
AND a.gcode = gcode
AND a.gtype = gtype ) = 0
AND a.id = b.id
AND a.seq = b.seq );