SQL*PlusでSQL文を実行させるには?

解決


souda  2003-10-21 03:34:10  No: 109271

わかる方いらっしゃいましたら、ご教授願います。

現在、フォーム起動時にOracleのSQL*Plusを起動させて特定の
SQL文を実行させる物を作成しています。
SQL*Plusの起動は問題なくできるのですが、その後のSQL文が発
行できなくて困っています。

何かよい方法はないでしょうか?


ぽー  2003-10-21 23:21:04  No: 109272

ちょっと強引な気もしますが・・・
    AppActivate "Oracle SQL*PLUS"
    SendKeys "SQL文"
    SendKeys "{ENTER}"
で出来ました。


だっちゃん  2003-10-22 02:00:31  No: 109273

こんちは

SQL*PLUSをshell等を利用して起動してるなら STARTまたは@を利用して
PL/SQLファイル(拡張子:sql)を起動したら如何でしょう?

例:sqlplus ユーザー名[/パスワード] @ファイルパス(c:\test.sql)


souda  2003-10-23 02:43:53  No: 109274

ぽー様、だっちゃん様
ありがとうございます。
PL/SQLファイルの起動も考えさせていただきましたが、単純なSQL文なので
今回はSendKeysを使用させてもらう事にしました。
一応以下のプログラムで動作する事を確認したのですが…。
----------------------------------------
Private Sub Form_Load()
    Dim lret As Long
    lret = Shell("C:\orawin95\BIN\PLUS80W.EXE user/pass@sid", vbNormalFocus)
End Sub
Private Sub Form_GotFocus()
   AppActivate "Oracle SQL*Plus"
   SendKeys "SQL文"     'SQL文発行
   SendKeys "{ENTER}"   '実行
   SendKeys "EXIT"      'SQL*Plus終了
   SendKeys "{ENTER}"   '実行
End Sub
----------------------------------------
最初、Form_LoadイベントでSendKeysを使用していたのですがこの場合
正常に動作しませんでしたのでForm_GotFocusにて行うことになったの
ですが、Form_Loadでは無理なのでしょうか?
また、SQL*Plusを終了させた後Formが残るのですが、これも自動的に終
了させたいのですが、自分なりに調べてUnloadを使ってみたのですが、
うまく動作しませんでした。
何か良い方法はありますでしょうか?

超初心者的な質問で申し訳ないのですが、よろしくお願いいたします。


s  2003-10-23 23:59:34  No: 109275

やりたい事がよくわかりませんが、作成されているフォームを
SQL*PLUSの起動にしか使わないのであればVBを使う必要もないのでは?
Windowsのショートカットを使うとか。

それから、SendKeysよりもだっちゃんさんの方法の方が安定すると思います。


souda  2003-10-24 01:43:04  No: 109276

s様
このプログラムの目的なんですけど、AとBのサーバーがあります。
Aは本番DBサーバーで、BがバックアップDBサーバーです。
ちなみにDBはOracleです。
Aで作成されたアーカイブREDOログをBに定期的に転送し、B
はこのログを適用させなくてはなりません。
で、この適用部分を自動化させたいと言う事をやりたかったのです。
ちなみに、Aは東京にBは大阪に設置され私は東京にいるので自動化
は必須なのです。

とりあえず、SendKeysとPL/SQLファイルを起動させる方法の2種類
を作ってみて、検討してみます。


souda  2003-10-24 01:51:53  No: 109277

すいません、ちょっと質問させてください。

だっちゃん様が言われている、PL/SQLファイルを起動させる方法とは
SQL*Plusでの作業と言う事でしょうか?
それとも、VBでと言うことなのでしょうか?

もし、SQL*Plusでと言う事であればやはりSendKeysを利用せざるを
得ないかも…。

よろしくお願いいたします。


だっちゃん  2003-10-24 22:17:32  No: 109278

こんちは。

私がイメージしてるのはVBからsqlplusを呼び出して処理をする方法です。

簡単に説明するとPL/SQLファイル(拡張子:sql)にSendKeysで発行している
SQL文を記述し任意のフォルダに保存しておきます。

sqlplusの起動時に、保存したファイルまでパスを引数にしてあげれば
自動実行でファイル内のSQL文を発行してくれます。
詳しくはsqlplusのマニュアルを参照してください。

動きを確認したいならば簡単なSQL文をファイルに保存して
コマンドプロンプトから発行してくだい。
下記の例は、ファイルをc:\test.sqlとした場合です。
sqlplus user/passwd@sid @c:\test.sql


souda  2003-10-25 04:08:10  No: 109279

だっちゃん様
>sqlplusの起動時に、保存したファイルまでパスを引数にしてあげれば
>自動実行でファイル内のSQL文を発行してくれます。
SQL*Plusでuser、pass、sidを引数にできる事は知っていましたが
ファイルまで引数にできるなんて知りませんでした。
VBははじめて一ヶ月程度ですが、SQL*Plusはそれなりにやってき
ていたのでそれなりにできると自負していたのですが…。
お恥ずかしい限りです…。
とりあえず、この方法で仕様を実現させます。

ぽー様、だっちゃん様、s様、他少しでも考えてくださった方々。
皆さんのおかげで、何とかなりました。
ありがとうございました。

今後また分からないことがありましたら、また質問させていただくか
もしれませんがその時はよろしくお願いいたします。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加