• ベストアンサー

ストアドプロシージャの出力について

ストアドプロシージャを出力したいと思っているのですが オブジェクトブラウザからですと、対象のSPを選択し、スクリプト出力することで ファイル出力できると思いますが、 sqlplusなどから、同様にファイル出力を行うことは可能でしょうか? 初歩的なご質問で恐縮ですが ご回答頂けると大変助かります。 よろしくお願い致します。

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

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

  • ベストアンサー
  • utakataXEX
  • ベストアンサー率69% (711/1018)
回答No.1

> ストアドプロシージャを出力したいと思っているのですが > オブジェクトブラウザからですと、対象のSPを選択し、スクリプト出力することで 出力と言っているのが、「ソースの出力」なのか「実行結果の出力」なのかが不明ですが、「オブジェクトブラウザのスクリプト出力」なので前者であろうと想定して回答します。 > sqlplusなどから、同様にファイル出力を行うことは可能でしょうか? はい。可能です。 オブジェクトブラウザも内部的には、ALL_SOURCEやDBA_SOURCEなどのディクショナリからソースを取得していると思われますので、同じ事をすればよいだけです。 以下のSQLを実行して SPOOL すればテキストに保存できます。 実行時のSET文にはちょっと工夫が必要です。 SET HEAD OFF; SET PAGES 0; SET LINES 300; SET TRIMS OFF; --↑他にもあったかもしれませんが、とりあえずこんな感じで。 ACCEPT TARGET_SP_NM PROMPT ストアドプロシージャ名入力: ACCEPT TARGET_SP_OWNER PROMPT 所有スキーマ名入力: SPOOL &TARGET_SP_NM..sql -- &TARGET_SP_NM SELECT TEXT FROM ALL_SOURCE WHERE NAME = UPPER('&TARGET_SP_NM') AND OWNER = UPPER('&TARGET_SP_OWNER') ORDER BY LINE; SPOOL OFF; 「ソースの出力」ではなく「実行結果の出力」であれば、 EXECUTE SP_XXXX(&引数 ...); などで実行できます。 (※OUTパラメータを使う場合は、無名PL/SQLブロックを使う必要があります) SPOOL の方法は同様なので、上記を参考にしてください。

関連するQ&A

  • ストアドプロシージャについて

    Access2003とSQL Server2005Expressです。 初歩的な質問で恐縮です。 以下のストアドプロシージャのデータ取得先を、テーブルではなく 別のストアドプロシージャにしたいのですが、 その方法がわかりません。 CREATE PROCEDURE テスト AS SELECT コード, 社名, 住所, 電話 FROM 名簿     ↑     これをテーブルではなく、別のストアドプロシージャを     指定したのですが・・・。     ここをストアドプロシージャ名にするとエラーになります。     どうすればよろしいでしょうか?

  • SQLServer・ストアドプロシージャでファイル出力したい

    こんにちは、いつもお世話になります。 今回はじめてストアドプロシージャというものをプログラムしているのですが、デバッグの方法がよくわかりません。 したい処理は練習として「あるテーブルのデータを検索し、その結果をCSVに出力する」という簡単なものなのですが、クエリアナライザで実行すると「コマンドは正常に終了しました。」というメッセージが出ているにもかかわらず出力されるべきテキストファイルはまったく存在しません。 そこでクエリアナライザのオブジェクトブラウザから該当ストアドプロシージャを選択し、右クリックのメニューで出てくる「デバッグ」という機能を試してみたのですが、そうすると以下のエラーメッセージが出てきました。 ODBC: メッセージ 0、レベル 16、状態 1 [Microsoft][ODBC SQL Server Driver][SQL Server]DLL mssdi98.dll がロードできないか、参照している DLL の 1 つがロードできません。理由 : 126(指定されたモジュールが見つかりません。)。 ・・・意味が良くわからない上に、何行目でエラーになっているのかもわかりません。ためしにある変数に値をセットする一行目以外すべてコメントにして実行してみたのですが、同じメッセージが表示されます。 ・・・おそらく、ストアドプロシージャを実行する前から何らかの理由でエラーになっていると思うのですがこの現象についておわかりの方いませんでしょうか?

  • プロシージャの全検索?

    Oracle9i(9.0.1.0.1) Windows2000でSI Object Browserを使用しています。 プロシージャの全検索をしたいのですが可能でしょうか? (プロシージャの中身が格納されているディクショナリって存在するのでしょうか) 今はオブジェクトブラウザからプロシージャをスクリプト出力して、他のエディタツールで全検索をかけています。 たとえば'aaa'というキーワードがどのプロシージャに含まれているか検索したいです。 いい方法がありましたら教えてください。 宜しくお願いします。

  • ストアドプロシージャでcsvファイルへデータにエクスポート

    いつも勉強させていただいています。 ストアドプロシージャの勉強をし始めて間もない素人ですがよろしくお願いします。 SQL-server2005でテーブルをCSVファイルに、ストアドプロシージャを使ってそのままエクスポートする、と言うことをやっています。 以下作成したストアドプロシージャです。 ******************************************* CREATE PROCEDURE [ストプロ名] AS DECLARE @command VARCHAR(200) BEGIN SET @command = ' bcp [データベース名].[スキーマ].[テーブル] out C:\XXXX\aaa.txt -PXXXXXX -UXXXXXX -SXXXXXX' EXECUTE master.dbo.xp_cmdshell @command END **************************************** 解析ボタン、実行ボタンをクリックしてもエラーは出ません。 「ストアドプロシージャの実行」を選択して実行させても、 アラーは表示されず、ファイルも作成されません。 xp_cmdshell が有効になるように設定もしました。 残念ながら検討すらつかない状態です。ぜひご教授お願いします。

  • 【 困 】 ストアドプロシージャ

    OS:WIN2000 DB:SQLServer2000 下記のストアドプロシージャを作成しました。 BULK INSERTを使っています。 引数でCSVファイルのパスを渡そうとしています。 「エラー170:行5: '@Query'の近くに無効な構文があります。」 というエラーになってしまいます。 5行目にあるFromの次に変数を書くには、どうしたらいいのでしょうか? CREATE proc SP_BULK_INSERT @Query char(100) AS BULK INSERT T_顧客マスタ FROM @Query WITH (FIELDTERMINATOR = ',') GO

  • SQLServer2005のストアドプロシージャのデバックの設定方法をご教示ください

    SQLServer2005でストアドプロシージャを作成しました。 VisualStudioを使用すればデバッグ(一行ずつ実行して、変数の中身や動作を確認)できるということですが、設定がうまくできません。 ストアドプロシージャ作成は初めてで、周りにも経験者がいないため解決策がわからない状態です。 ご存知の方、気がついたことがある方は、ぜひご教示ください。 ■■ マシン環境 ■■ OS:Windows2003Server DB:SQLServer2005 ■■ 試した方法 ■■ 1.DBサーバマシンのVisualStdio2005を使用 上記マシンに、SQLServer2005をインストールしたとき、  VisualStudio2005が自動的にインストールされたので これを使用することを考えました。 VisualStudio2005の「サーバーエクスプローラー」に、 今回作成したストアドプロシージャを表示するところまではできたのですが、 デバッグ実行できません。 メニューから「ストアドプロシージャのステップイン」を選択してデバッグウインドウを表示するらしいのですが メニューには、以下のものしか表示されません。  新しいプロシージャの追加 / 開く / 実行 ためしに実行すると、ストアドプロシージャは動作します (テーブルへのデータINSERTをストアドでコーディングしており、実行後に指定値が入っていたため) しかし、デバッグポイントを設定できず、ステップ実行もできません。 2.別マシンのVisualStdio2003を使用 私の開発マシンにはVisual Studio 2003が入っているため、 DBサーバマシンとリモートで接続して、上記と同様の設定を行いました (このVisual Studio2003はC#開発用にインストールしたものです)。 こちらは、メニューに「ストアドプロシージャのステップイン」が出ました。しかし……。 メニューから「ストアドプロシージャのステップイン」を選択してデバッグウインドウが表示されたときに、以下のメッセージボックスが出ます。 「SQL Server データベースが正しくセットアップされていないか、またはユーザーに master.sp_sdidebug を実行する権限がないため、ストアド プロシージャをデバッグできません。」 デバッグウインドウ上でデバッグポイントは設定できますが、 ストアドプロシージャを実行してもデバッグポイントでとまらず ステップ実行もできません。 (同様にINSERTしたテーブル値から、ストアド自体は動作していると判断) なお、1.2.共にSA認証でSQLServer2005にログオンしています。 SQLServer のデバッグできるのは、sysadminサーバロールを持つユーザだけらしいですが、 SA認証で使用しているユーザには「sysadmin」のサーバロールは設定しています。 ■■ 質問 ■■ 1) QLServer2005インストールで自動的にインストールされるVisualStudioでは、 ストアドプロシージャのデバッグはできないのでしょうか? それとも、SQLServer2005インストール時に、開発環境等の追加設定や、 別途VisualStudio2005をインストールする必要があるのでしょうか? それとも、別にSQLServer management Studioや構成ツール等で設定が必要なのでしょうか? または、メニューに「ストアドプロシージャのステップイン」を出す設定(方法)をご存知の方、ご教示をお願いします。 2) 「SQL Server データベースが正しくセットアップされていないか、またはユーザーに master.sp_sdidebug を実行する権限がないため、ストアド プロシージャをデバッグできません。」 このメッセージはどうすれば回避できるのでしょうか? SQL Server データベースが正しくセットアップされていないということですが、 これまで特に支障がないため問題はないと思っているのですが……。 検索で以下のサイトを見つけましたが、SQLServer2000のため参考になるかは疑問です。   http://support.microsoft.com/kb/839280/ja   http://support.microsoft.com/kb/886680/ja 以下のサイトは、どうすれば原因回避できるのかわかりませんでした(勉強不足を感じております)   http://msdn2.microsoft.com/ja-jp/library/ms164014.aspx master.sp_sdidebug を実行する権限の設定方法をご存知の方、ご教示いただけませんでしょうか? 3) Visual Studio以外で、SQLServer2005のストアドプロシージャをデバッグする方法がありましたらご教示ください。 変数の途中の値を一時テーブルにINSERTして確認するくらいしか方法はありませんでしょうか? 申し訳ございませんが、もしご存知の方、ご教示いただけませんでしょうか? なお、設定やマシン環境で記述不足等ありましたら、ご指摘いただければと思います。 以上です。よろしくお願いします

  • ストアドプロシージャに渡された引数の参照方法

    コンパイル済のVB6のプログラムからストアドプロシージャをCALLして いるのですが、実際にどのような値を渡しているのかを調べなければなりません。 VB6の開発環境があれば容易いのですが、現在実行環境しかない為ORACLE側での 調査が必要です。 全てのプロシージャに出力ロジックを追加すれば良いのですが、 数が多すぎて対応に困っております。 ツールや方法論等につきまして、どなたかご存知でしたらご教授頂けると助かります。 環境は以下の通りです。 Client: WindowsXP SP3 VB6で作成したEXE Server: Linux(Red hat linux) ORACLE 11g Standard PL/SQLで作成したStoredProcedure ちなみに、JdeveloperやOracle SQL Developerも調べて見たのですが、 お恥ずかしながら、今一理解が出来ませんでした。

  • SQLServer2005で、DropとCreateを同時に含むスクリプトを簡略に作成する方法

    SQLServer2005のオブジェクト・エクスプローラ上で、スクリプトを得たいストアドの上で右クリック→「名前を付けてストアドプロシージャをスクリプト化」を選択すると、さらにCreate,Alter,Dropなどに分かれて選択するようになってしまい、最初にDrop してからCreateするような、便利な1本のスクリプトが生成できません。 どこか別に、設定しておくべき箇所があるのでしょうか。あるいは別に、他の良い方法があるのでしょうか。

  • ストアドプロシージャ結果のファイル出力について

    お世話になります。 以下のようにOracleにてストアドプロシージャを作成して、 それをAccessからコールしております。 そしてそのDBMS_OUTPUTの結果をファイル出力したいのですが、 試しに「sqlstmt = "BEGIN proc_SeikyuMeisai(:yyyymm); END;"」の部分を 「sqlstmt = "spool aaa.csv BEGIN proc_SeikyuMeisai(:yyyymm); END; spool off"」 や、ストアド側でspoolしてみましたがダメでした。 UTL_FILEを使うしかないのでしょうか? ご存じの方おられたらご教示いただけますでしょうか? 宜しくお願い致します。 【Access2003側】 ' セッションの作成 Set OraSession = CreateObject("OracleInProcServer.XOraSession") 'データベースへの接続 Set OraDatabase = OraSession.OpenDatabase("Hoge", "hoge/hoge", ORADB_DEFAULT) '■ ストアド実行 ■ sqlstmt = "BEGIN proc_SeikyuMeisai(:yyyymm); END;" 'バインド変数の設定 OraDatabase.Parameters.Add "yyyymm", 0, ORAPARM_INPUT OraDatabase.Parameters("yyyymm").serverType = ORATYPE_NUMBER '引数設定 OraDatabase.Parameters("yyyymm").value = Forms!F月次データ取込.txt日付1 'SQL文の実行 OraDatabase.ExecuteSQL sqlstmt DoCmd.Hourglass False '砂時計 'バインド変数の削除 OraDatabase.Parameters.Remove "yyyymm" '■ORACLEへの切断■ OraDatabase.Close 'オブジェクトの破棄 Set OraDatabase = Nothing Set OraSession = Nothing MsgBox "正常に出力されました。" 【Oracle10g】 Create or replace procedure Proc_SeikyuMeisai ( P1_YYYYMM IN number ) IS WK_KANID varchar2(10); WK_CODE varchar2(6); WK_SUU varchar2(12); WK_TEN varchar2(9); WK_KAI varchar2(2); -- カーソルタイプの定義 TYPE typeMyCursor IS REF CURSOR; -- カーソル変数の定義 curSeikyu typeMyCursor; curID varchar2(10); curMAX number; curMEISAI varchar2(1000); curTEN number; curKAI number; vSql varchar2(1000); BEGIN vSql := 'select KANNO, MEISAI_MAX, _MEISAI, HOU_TENSUU_KEI, TOTAL_KAISUU from SEIKYUUMEISAI' || P1_YYYYMM; -- カーソルオープン open curSeikyu for vSql; loop fetch curSeikyu into curID, curMAX, curMEISAI, curTEN, curKAI; exit when curSeikyu%NOTFOUND; WK_KANID := curID; for nLpCnt IN 1..curMAX loop WK_CODE := substrb(curMEISAI, 3, 6); WK_SUU := substrb(curMEISAI, 34, 12); WK_TEN := substrb(curMEISAI, 89, 9); WK_KAI := lpad(curKAI, 2, 0); dbms_output.put_line(WK_KANID || ',' || WK_CODE || ',' || WK_SUU || ',' || WK_TEN || ',' || WK_KAI); end loop; end loop; end; /

  • MySQLのストアドでファイルを削除

    MySQLのストアド(プロシージャ/ファンクション)でテキストファイルを削除する方法を探しています。 テキストファイルは、他のファイルでも構いません。 テーブルにデータがINSERTされた時に実行されるストアドです。 system rm -f 'ファイル名'; によるファイルの削除を試みましたが、エラーが発生します。 可能であればストアドからファイルを削除したいですが、難しいようでしたら上記の条件を満たす限り、どのような方法でも構いませんので、教えて欲しいです。 各バージョンは最新バージョンとします。 大変困っていますので、どうかご協力を、宜しくお願い致します。