1
Oracle 11g
Oracle SQL Developer 3.0.03

+100K 行の運用テーブルからすべてのデータを開発テーブルにコピーする必要があります。テーブルは 2 つの異なるスキーマにあります。

私はやり始めました:

select * 
  from prod_schema.prod_table 
 where ronum <= 50000 order by ID asc

それからする

select * 
  from prod_schema.prod_table 
 where ronum >= 50001 
   and rownum <=107161 order by ID asc

しかし、2 番目のクエリではデータが取り込まれません。

何か案は?

4

3 に答える 3

2

Oracle の ROWNUM は、大なり (>) として比較されるべきではありません。

クエリを実行すると、Oracle は行に AS THEY ARE RETURNED の番号を付けます。

where rownum > 1

行が破棄されると無視されるためです。つまり、上記の場合、ROWNUM=1 は存在せず、データはまったく得られません。

于 2012-09-12T18:18:43.570 に答える
1

ROWNUMオラクルで より大なりを使用しながら、以下のクエリを使用できます。

SELECT *
    FROM
     (SELECT a.*, rownum rn FROM
         (SELECT * FROM prod_schema.prod_table ORDER BY ID ASC) a WHERE rownum <= 107161)
    WHERE rn >= 50001;
于 2012-09-12T18:24:11.540 に答える
0

この記事を参照してください:rownum行が結果セットに入ると、割り当てられるだけです。したがってwhere rownum > 1、行を返すことはありません。

これを1回の選択で行います(ヒントを使用insert into / select * fromする/*+ append */か、CTASを使用します)。または、expdp/を使用します。このオプションをimpdp使用しREMAP_SCHEMAてスキーマ名を変更できます(Oracleのバージョンによっては、選択したセットを制限することもできます)。

于 2012-09-12T18:20:19.320 に答える