2016-07-26 8 views
0

空のレコードをテーブルに挿入して、57,816,000レコードの最終値を取得しようとしています。私は550のユニークな識別子のテーブルから始まります。それぞれ異なるTMC名のために、それぞれ異なる値ごとに105,119個のレコードを追加したいと思います。したがって、各TMCには105,120レコードがあります。 (105,119 * 550 = 57,815,450(+オリジナル550 = 57,816,000))ループの空白行をORACLEに挿入する

しかし、私が抱えている問題は、これを言うTOAD内のエラーです。

ORA-03113:ファイルの終端通信チャネル上 プロセスID:10272 セッションID:247シリアル番号:1959 スクリプト

を終了するには、小さな規模で動作しますが、私はそのことを疑います行く最善の方法。以下は私のスクリプトです。何かアドバイス?

declare i number(10) :=1; 

begin 

for i in 1..105119 

Loop 
insert into npmrds_dummy 
select distinct tmc, 
travel_time_passenger_vehicles, 
travel_time_freight_trucks, 
travel_time_all_vehicles, 
road_number, 
road_name, 
epoch, 
distance, 
date1, 
admin_level_1, 
admin_level_2, 
admin_level_3 

from npmrds_dummy; 

end loop; 
end; 
+0

これはMySqlですか? – trincot

+0

私の謝罪。私はTOAD for Oracle 12.8 – kyle

答えて

1

あなたは1つのSQL文でこれを行うことができます:

insert into npmrds_dummy 
     select npmrds_dummy.* 
     from npmrds_dummy 
     inner join (select 1 from dual connect by level <= 105119) 

選択サブで参加したレコードの数を乗算するa neat trickです。

最初はレコードが一意であるため、distinctの必要はありません。select npmrds_dummy.*を実行することができます。

+0

を使用しています。ご協力ありがとうございました。これは私にとっても素晴らしい学習経験でした。 – kyle

+0

別の質問。私は理想的ではないが、私は一時的なテーブルスペースでいくつかの制約を扱っているので、多くのレコードをコミットすることを読んできた。これは、このようなSQL文のオプションですか? – kyle

+0

[here](https://docs.oracle.com/cd/A58617_01/server.804/a58227/ch_dlins.htm#880)に記載されているように、「直接ロード」の挿入を強制するために 'append'ヒントを使用することもできます)。引用:*「直接ロードINSERTの主な利点は、再実行または元に戻すエントリを記録せずにデータをロードできることです」 – trincot

関連する問題