
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制作)
-
batファイルでのSQL(oracle)実行エラーについて
Oracle
-
-
4
PL/SQLをWindowsのBATファイルで実行するには
Oracle
-
5
PL/SQLでSPOOLさせたいのですが、可能でしょうか?
Oracle
-
6
SQLPLUSで結果を画面に表示しない
Oracle
-
7
SQL*Plusの終了はquit?exit?
Oracle
-
8
PL/SQLで@ファイル名が反応しません
Oracle
-
9
SQL>UPDATEと同時にその件数をCOUNTする方法
その他(データベース)
-
10
バッチファイルからSQLファイルへ引数を渡したい!
その他(プログラミング・Web制作)
-
11
oracle spool SJIS → UTF-8
Oracle
-
12
sqlplusでヘッダーが付かない
Oracle
-
13
sqlcmdでクエリの実行結果をバッチの環境変数に入れる方法について
SQL Server
-
14
PL/SQL PLS-00103エラーについて
Oracle
-
15
SQLローダーCSV取込で、囲み文字がデータ中に入っている場合について
Oracle
-
16
バッチでテキストファイルから任意の行のみ取得したい
その他(プログラミング・Web制作)
-
17
Windowsのバッチファイルで正規表現の置換方法について…
Windows 10
-
18
PL/SQLでログを確認したい。
Oracle
-
19
コマンドプロンプトによるフォルダ内のファイル存在有無
UNIX・Linux
-
20
SI Object Browserのテーブルスクリプト出力のやり方
その他(データベース)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
SQL Server 2005 EXPRESSでログ...
-
SQL*Plusで以前に実行したコマ...
-
ORACLEのエクスポートについて
-
Oracleで流したSQLのログを取得...
-
実行計画の結果の整形(折り返し)
-
PL/SQLからshellスクリプ...
-
Accessからoracleのストアドプ...
-
ShellからTruncate【Linux】
-
リスナーログを出力しない設定方法
-
SQL*Plusで、コマンドの返答を...
-
xy平面上の点P(x,y)に対し,点Q(...
-
ACCESSでパススルークエリにパ...
-
コムテックドライブレコーダーH...
-
ブラウザのURLよりリクエストパ...
-
4GB = 4096MB ではない?
-
DOSプロンプトとコマンドプロン...
-
ZパラメータとFパラメータがわ...
-
share docsってどう読むのですか?
-
リカバリ
-
アーカイブログモードの変更に...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
PL/SQLでログを確認したい。
-
Oracleで流したSQLのログを取得...
-
SQL*Plusで、コマンドの返答を...
-
ストアド・プロシージャをバッ...
-
batファイルでのSQL(oracle)...
-
トレースファイルの削除スクリプト
-
サービスの再起動を自動で
-
SQL実行結果の出力を見やすくし...
-
ソート(大文字・小文字を区別...
-
SQL実行結果取得
-
ORA-00984のエラーが出ます
-
Accessからoracleのストアドプ...
-
JavaでのOracle接続について(J...
-
execute使用した時の、完了メッ...
-
マテリアライズドビューログに...
-
リスナーログを出力しない設定方法
-
【spoolコマンドで追記】
-
SQL*PLUSを終了させる方法
-
シェル上でDBコマンドをループ...
-
SQL*Plus:SPOOLコマンドでのSQ...
おすすめ情報