No.2ベストアンサー
- 回答日時:
根本的に見直して、SQL*Loaderを使う方が良いんじゃないですかね。
パラメータファイル(5~6行)を書く必要がありますが、コマンド一つでロード可能です。
コミットも1万件ごとに発行可能ですし、インサートに失敗したデータも選別できます。
インサートの処理内容もログに書き出されるので、ログを解析すれば、目的は達成されるハズです。
No.1
- 回答日時:
もう少し、詳しく書かないと分かりませんね。
バッチの実行はコマンドから?(Tera Term や TELNET?)
実行するのは問合せ? プロシージャー?
まあ、PL/SQLなら、DBMS_OUTPUT.PUT_LINE を使うとか
問合せなら、SPOOL でログを取り、最後の何行かを実行後に出力するバッチにするとかですかね。
この回答への補足
ご回答ありがとうございます。
コマンドからです。
現状の仕様はバッチファイルを実行すると、txtファイルよりパラメータを読み込み、INSERT文を作成し、最後に一括して実行するといったものになっています。
SPOOLしているのは、処理開始時刻と処理終了時刻をログファイルに出力するためです。
また、INSERT文1万件ごとにcommit文を挟むようにしています。
rem ログファイルパス
set log_path=LOG.txt
rem 開始時刻をログ出力
echo [開始時刻] >> %log_path%
echo %time% >> %log_path%
rem datファイル名
set dat_name=dat_1.dat
rem READファイルパス
set cmt_path=test.csv
rem INSERT処理件数カウンタ
set count=0
rem sql文の頭
echo set feedback off; > %dat_name%
echo set verify off; >> %dat_name%
echo spool %log_path% append; >> %dat_name%
rem READファイルより一行づつデータを読み込みます。
For /F "tokens=* delims=" %%i in (%cmt_path%) Do Call :Sub %%i
rem sql文のおしり
echo spool off; >> %dat_name%
echo commit; >> %dat_name%
echo exit >> %dat_name%
sqlplus -s */*@* < %dat_name%
rem 完了時刻をログ出力
echo [完了時刻] >> %log_path%
echo %time% >> %log_path%
rem 処理件数をログ出力
echo [処理件数] >> %log_path%
echo %count% >> %log_path%
echo.
echo 処理を終了しました。
echo.
notepad %log_path%
pause >nul
goto :eof
:Sub
set DATA=%1
set word1=%DATA:~0,4%
set word2=%DATA:~4,8%
set word3=%DATA:~12,1%
set word4=%DATA:~13,25%
echo INSERT INTO *_DATA (t1,t2,t3,t4) VALUES(LPAD('%word1%',6,0),LPAD('%word2%',15,0),LPAD('%word3%',6,0),'%word4%'); >> %dat_name%
rem datファイルに書き込んだINSERT文の数をカウントします。
set /a count=count+1
rem 一万件ごとにCOMMITを行うようにします。
set /a result=count%%10000
if %result%==0 goto label1
:else
goto end
:label1
echo commit; >> %dat_name%
echo spool off; >> %dat_name%
echo exit; >> %dat_name%
sqlplus -s */*@* < %dat_name%
set dat_name=dat_%count%.dat
echo set feedback off; > %dat_name%
echo set verify off; >> %dat_name%
echo spool %log_path% append; >> %dat_name%
:end
goto :eof
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- SQL Server [SQLServer] テーブル名からカラム名を取得する 1 2022/08/23 21:20
- PHP PHP MySql ページング 2 2022/09/20 06:38
- SQL Server これをSQL文で出来るでしょうか? 1 2023/03/26 02:16
- Excel(エクセル) PHPプログラムをエクセルに張り付けると検索ボックスがでてくる! 3 2022/05/08 07:10
- MySQL #1062 - '0' は索引 'PRIMARY' で重複しています。とでています。 1 2023/01/01 06:13
- PostgreSQL SQLでUPSERTを一度に複数行やる方法 3 2022/03/25 15:17
- SQL Server 2つのSQL(Access)の結果[時刻,カウント数]を結合して集計する方法 1 2022/04/06 22:57
- MySQL 書籍の内容はまともでしょうか? 1 2023/01/22 03:07
- Oracle 質問です。 下記のテーブルとデータがあり、 取得想定結果のように出力したいです。 下記のsqlだと0 2 2023/05/23 19:10
- Excel(エクセル) EXCELの「接続」のSQLのコマンド文字列にて、セルから任意の数値を利用したい 2 2023/03/09 16:43
このQ&Aを見た人はこんなQ&Aも見ています
-
プロが教える店舗&オフィスのセキュリティ対策術
中・小規模の店舗やオフィスのセキュリティセキュリティ対策について、プロにどう対策すべきか 何を注意すべきかを教えていただきました!
-
バッチファイルを使用したsql@plusの実行及びログ出力について
Oracle
-
バッチからsqlplusの接続エラーの検知について
その他(プログラミング・Web制作)
-
PL/SQLをWindowsのBATファイルで実行するには
Oracle
-
-
4
sqlcmdでクエリの実行結果をバッチの環境変数に入れる方法について
SQL Server
-
5
プロシージャの戻り値を取得する方法
Perl
-
6
PL/SQLでログを確認したい。
Oracle
-
7
batである文字列内に特定の文字列が含まれているか確認したい
その他(プログラミング・Web制作)
-
8
SQL*Plusの終了はquit?exit?
Oracle
-
9
batファイルでのSQL(oracle)実行エラーについて
Oracle
-
10
SQL>UPDATEと同時にその件数をCOUNTする方法
その他(データベース)
-
11
CSVファイルの中で、「 , 」カンマを使いたい
その他(コンピューター・テクノロジー)
-
12
ORA-01013のエラーについて経験のある方お願いします。
Oracle
-
13
Statement ignored というエラー
Oracle
-
14
SQLローダーCSV取込で、囲み文字がデータ中に入っている場合について
Oracle
-
15
コマンドプロンプトの「%1」と「%~1」の違いがわからない
その他(プログラミング・Web制作)
-
16
SQLPLUSで結果を画面に表示しない
Oracle
-
17
バッチでテキストファイルから任意の行のみ取得したい
その他(プログラミング・Web制作)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
SQL*Plusで、コマンドの返答を...
-
SQL実行結果の出力を見やすくし...
-
トレースファイルの削除スクリプト
-
batファイルでのSQL(oracle)...
-
ストアド・プロシージャをバッ...
-
JavaでのOracle接続について(J...
-
PL/SQLでログを確認したい。
-
SQL*PLUSを終了させる方法
-
【spoolコマンドで追記】
-
マテリアライズドビューログに...
-
PL/SQLからshellスクリプ...
-
レスポンス悪化
-
ソート(大文字・小文字を区別...
-
SQL*Plusで以前に実行したコマ...
-
ORA-00984のエラーが出ます
-
シェル上でDBコマンドをループ...
-
Oracleで流したSQLのログを取得...
-
リスナーログを出力しない設定方法
-
ORACLEの停止失敗
-
DTSでCSVファイルを出力するさ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
PL/SQLでログを確認したい。
-
SQL*Plusで、コマンドの返答を...
-
SQL実行結果の出力を見やすくし...
-
トレースファイルの削除スクリプト
-
batファイルでのSQL(oracle)...
-
Oracleで流したSQLのログを取得...
-
ストアド・プロシージャをバッ...
-
サービスの再起動を自動で
-
JavaでのOracle接続について(J...
-
Accessからoracleのストアドプ...
-
SQL*PLUSを終了させる方法
-
リスナーログを出力しない設定方法
-
execute使用した時の、完了メッ...
-
ORA-00984のエラーが出ます
-
ソート(大文字・小文字を区別...
-
PL/SQLからshellスクリプ...
-
oracle11g listener.logの削除
-
ShellからTruncate【Linux】
-
シェルの実行ができません
-
【spoolコマンドで追記】
おすすめ情報