• ベストアンサー

PL/SQLプロシージャの実行方法

shスクリプトからplsql ID/PASSWORD@SID @plsql.sql コマンドにてplsql.sqlファイルに記述したPROCEDUREを実行しようと すると、 プロシージャが作成されました。 SQL> となって入力待ちとなり、実行されません。 ごく基本的な質問かもしれませんが、 どうやったらPROCEDUREを実行できるのでしょうか。

noname#30874
noname#30874
  • Oracle
  • 回答数1
  • ありがとう数2

質問者が選んだベストアンサー

  • ベストアンサー
noname#33813
noname#33813
回答No.1

実行しているSQLファイルがCREATE~になっていませんか? (ストアドプロシージャーを作るスクリプトになっていませんかということです。) だとすると生成処理になってしまいますので、直接実行したいということでしたらCREATE宣言は外す必要がありますよ。

noname#30874
質問者

お礼

ご回答、ありがとうございます。 パッケージに記述するとうまく実行できるのかな? いろいろやってみます。 ご協力ありがとうございました。

noname#30874
質問者

補足

>実行しているSQLファイルがCREATE~になっていませんか? そうです。CREATE OR REPLACE PROCEDURE TEST ~になっています。 >直接実行したいということでしたらCREATE宣言は外す必要がありますよ CREATEの一文をはずすと正常に実行できました。 しかし、例えば引数をもらって実行する時などはどうするのでしょうか?

関連するQ&A

  • shからPL/SQLブロックを実行する方法

    Solaris上でshスクリプト中からPL/SQLを記述したファイルを呼び出して、Oracleのテーブルに対して操作したいのですが、 test.shファイル #/bin/sh sqlplus userid/password@ddzk test.sqlファイル DECLARE … BEGIN INSERT INTO table VALUES( …  ) END; / コマンドラインから $./test.sh を実行すると、 ./test.sh: sqlplus: 見つかりません。 と表示されます。 どなたかshスクリプトからPL/SQLで記述したファイルを実行する 方法をご存知の方、ご教示願います。

  • SQL*PLUSを終了させる方法

    シェルスクリプトから、SQL*PLUSを呼んでいますが、 sqlplusコマンドを実行したとき、 PL/SQLプロシージャが正常に完了しました。 SQL> と入力待ちになってしまいます。 この入力待ちで止まってほしくないのですが、 どうすればよいでしょうか。 ご教示お願いいたします。

  • BシェルでSQL文を実行

    【OS:AIX】 あるユーザーでCRONを組んでおり、オラクルのプレシジャを読み込ませるシェルプログラムをCシェルで組んでありました。 それをとある理由でBシェルに変更させてチェックしております。 ところがBシェルに変更してから以下のsqlplus文で失敗してしまいます。 ただ、単独でshファイルを実行するときは、SQL文も読み込んでくれて問題なく正常に終了するのですが、crontabで実行させるとSQL文を読み出すところで失敗してしまいます。 何かいけないところはありますでしょうか # SQL*Plusを呼び出しデータ作成 sqlplus ID/PASSWORD@SID < $HOME/script/data.sql ユーザアカウント自体はデフォルトでKシェルで作成されたユーザです。

  • PL/SQL ストアドプロシージャが実行できません

    はじめまして、ほんの最近プログラムの世界に入ったキグと申します。 2週間、インターネットや参考書(ポケットリファレンス、PL/SQL入門)などで調べていたのですが分かりませんでしたので質問させていただきます。 ORACLE11gパーソナルエディションでやっています。 (CSEで作成実行しました。) **************************** 作ったSQL文 CREATE OR REPLACE PROCEDURE PRO_1 IS BEGIN (実行確認できたSELECT文) END ※試してみたこと、 SELECT文の列指定はアスタを使わずに書きました。 AUTHID CURRENT_USERをプロシージャ作成のときに入れてみました。  **************************** EXEC PRO_1 エラー→構文エラーまたはアクセス違反です。 BEGIN PRO_1; END; エラー→オブジェクト'PRO_1'が無効です。 上記エラーが出まして実行できていない状態です。 解決方法が分かる方いらっしゃいましたら、ぜひ回答を お願いしたいです。 以上よろしくお願い申し上げます。

  • bashで実行したsqlの実行結果の戻り値

    bashで実行したsqlの実行結果の戻り値 bashを使用して、DB間の通信の監視を行なおうとしております shellの内容はサーバAでoracleに接続(sqlplus)して、 そこからサーバBへ接続(connect)するだけの記述です。 この時、 MSG=`sqlplus ID/PASSWORD@SID @connect.sql` echo XXX で、@connect.sqlの実行結果を戻り値としてechoさせたいのですが、 この場合、どのように指定すればよいのでしょうか? (上記の状態でshellを実行すると、connect側ではなく、 sqlplusの戻り値が戻ってきてしまいます) ※conenct.sql connect 接続先DBのID/PASSWORD@接続先 exit だけのsqlで、こちらの接続確認は取れております

  • SQL Loaderを使いたい

    Oracleのバージョンは8、自分のPCには Oracle8Client(Application User) がインストールされています。 見よう見まねで制御ファイルを記述し、バッチファイルを作成したところ、 ( sqlldr USERNAME/PASSWORD@SID control= test.ctl ) コマンドプロンプトには以下のように表示されました。 「C:\SQL>sqlldr USERNAME/PASSWORD@SID control = test.ctl 'sqlldr' は、内部コマンドまたは外部コマンド、 操作可能なプログラムまたはバッチファイルとして認識されていません。」 実行できない原因はどこにあるか教えてください。 1.そもそもSQL Loaderを利用できる環境になっていない (そのままでは使えなくて何かしら設定が必要とか) 2.コマンドがまちがっている (test.ctlのパスを記述しないとだめとか、SIDは要らないだとか) 3.制御ファイルがまちがっている どの可能性が一番高いでしょうか?

  • scpをスクリプト内で実行してそれにpasswordを渡したい

    scpをスクリプト内で実行して,それにpasswordを渡すようなことをshellスクリプト又はPerlスクリプトで出来ますでしょうか? (私の調べたところ)scpはオプションでpasswordを渡すことがどうやら出来ないようなので, プロンプトが入力待ちになったときにそこにpasswordを流すようなことを実現したいのです. 因に, #!/bin/sh scp test.txt host.hogehoge.ne.jp:~ echo "passwd"; ではパスワード入力の所で止まって仕舞います. スクリプトに生にpasswordを記述するのはセキュリティ上マズイとはおもいますが,この問題はとりあえず別問題として下さい. よろしくお願いします.

  • asp.NET内でSQLプロシージャを実行させた

    お世話になります。  SQL2000+asp.NETの環境で、SQLのプロシージャを実行させようとしています。 このプロシージャはテキストファイルを読み込んでデータベースに追加・削除するもので、ここで使用している関数は  ・DELETE/UPDATE/INSERT  ・BULK INSERT  ・CURSOR です。このプロシージャを実行させるには「.NETユーザー」に対し、  サーバーロールにてbulkadmin  ユーザ権限にてdd_ddladmin の権限を付与すれば実行されることは確認しています。  ここで、ご質問なのですが、asp.NETでプログラミングされていらっしゃる方は、普通にWEBログインユーザーに上記権限を付与していらっしゃるのか知りたいのです。  逆に、この権限付与は危険だからsubプロシージャにて記述したほうがいいよとかお教えいただければ、と思います。  以上よろしくお願いいたします。

  • ストアドをSQL*PLUSで実行したい。

    こんにちわ。 いまORACLE10gのPLSQLでストアドプロシジャを作成しています。 CREATE OR REPLACE PROCEDURE procXXXXXXXX ( oCNT1 OUT NUMBER , oCNT2 OUT NUMBER , nRET OUT NUMBER ) IS ~ というものですが,これをSQL*PLUSでテストとして実行したいのですが,変数定義などどうすれば良いでしょうか? 教えてください。よろしくお願いします。

  • 【PL/SQL】IF文( EXIT WHEN )でプロシージャの実行結果から判断させたい

    Oracleで動くPL/SQLを作成してます。 プロシージャの実行結果をIF文に入れて、 実行結果からさらに処理を走らせたいのですが エラーが出てしまいます。 例) CREATE PROCEDURE TEST1(id NUMBER) BEGIN select NAME from TBLA where DID = id and ROWNUM <= 1; END; CREATE PROCEDURE TEST2(id NUMBER) BEGIN LOOP EXIT WHEN ( TEST1(id) is not null );☆ここがうまくいかない。 id := id + 1; END LOOP; END; TEST2のCreate時にTEST1は関数として存在しないというエラーメッセージが表示されます。 IF(EXIT WHEN)文中からはずして TEST1(id)のみの実行では、エラーが起きず IF文に入れるとエラーが起きるところまでは分かりました。 例はかなり簡略しているのですが、 どうしたらうまく動くのか分かる方がいれば 教えてもらいたいです。