実行中にSQL*LOADERを実行されるのには?

解決


コジ  2004-04-19 15:28:10  No: 112882  IP: [192.*.*.*]

VBの実行中にSQL*LOADERを実行させたいのですけど、
どのようにパラメータを渡せばよろしいのでしょうか?
よろしくお願いします。

編集 削除
ハナクソース  2004-04-19 15:57:01  No: 112883  IP: [192.*.*.*]

SHELL関数を利用してDOSプロンプトからコマンドを発行するのと同様の
ことを実現することができます。

Shell(コマンド,ウィンドウ形式)
てな感じで。

SQL*LOADERなら、たとえば

SHELL("sqlldr.EXE userid=GOTO/GOTO@SERVER010control=…",vbMinimizedNoFocus)

でできます。(vbMinimizedNoFocus=実行中ウィンドウは最小化表示)

しかし、Shell関数はコマンドを発行後に該当のPGが終了するまで待ち合わせる
といったことをしません。たとえばSQL*LOADERでデータをInsertし、COMMITがきられた後に次の処理を行いたいという場合(おそらくそうでしょう)はAPI関数でプロセスハンドルを取得し、終了するまでループする等の工夫が必要でしょう。

編集 削除
コジ  2004-04-19 17:37:01  No: 112884  IP: [192.*.*.*]

ありがとうございます。
ハナクソース様のコメントを参考させていただきます。

データのファイルがTAB区切りなんですけど、問題なく読めるのでしょうか?
追加の質問をしてしまい申し訳ありません。
よろしくお願いします。

編集 削除
ハナクソース  2004-04-19 17:55:30  No: 112885  IP: [192.*.*.*]

TAB区切りうんぬんはVBではなく、SQL*LOADERでの話になってきますね。

Shell関数はあくまでも”Dosプロンプトでコマンドを発行する”という関数だと
思ってください。

さて、SQL*LOADERでTAB区切りデータのロードですが…

私がCSVファイル(つまりカンマ区切り)でやったときのSQL*LOADERのコントロールファイルの記述です。よかったら参考にしてみてください

load data
infile "D:\テストデータ.CSV"
append
into table テストデータマスタ
fields terminated by ","  ←この部分にデータの区切り文字を指定する
(
COLUMN_A,
COLUMN_B,
COLUMN_C
)

ちょっとVBからはそれましたが、がんばってみて下さい。参考になれば幸いです。

編集 削除
コジ  2004-04-20 10:13:45  No: 112886  IP: [192.*.*.*]

ハナクソース様何度もありがとうございます。
TAB区切りで読むことができました。
でも、nullデータ場合(A,,B区切りは「,」)nullの値を飛ばして読んでしまいます・・・。
いろいろ調べてみたんですけれどもダメでした。
preserve blanksを使えばいいのでしょうか?
よろしくお願いします。

編集 削除
コジ  2004-04-20 11:19:59  No: 112887  IP: [192.*.*.*]

preserve blanksを使って、
optionally enclosedを削除したところ
無事実行することができました。
ありがとうございました。

編集 削除