0

sybaseスクリプトをOracle11gスクリプトに変換するのに苦労しています。翻訳ツールを使用しましたが、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;   

OracleSQL開発翻訳ツールの結果は次のとおりです。

 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 );  

RowIdの代わりにIDを使用して書き込むのは安全ですか?: 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 );  
4

2 に答える 2

0

Rowid は行を識別します。2 つの行が同じ ROWID を持つことはできません。テーブルの id が主キー (複合キーの場合は一部ではない) である場合、基本的には id を使用して同じことを達成します。ただし、rowid は行の物理的な位置を参照し、インデックスを使用して行にアクセスする必要がないため、通常はより高速なアクセスを提供します。

于 2012-08-08T06:48:22.757 に答える