• ベストアンサー

ストアドプロシージャ

TAGOSAKU7の回答

  • TAGOSAKU7
  • ベストアンサー率65% (276/422)
回答No.2

>   1  注文数×単価 >   2  在庫数×単価 を    1  注文数*単価    2  在庫数*単価 にしてください。     --CREATE PROCEDURE TEST --ALTER PROCEDURE TEST ( @in計算式ID INT ) AS DECLARE @計算式 VARCHAR(100) DECLARE @ErrorSave int --ErrorCode DECLARE @RowCnt int --RowCount DECLARE @StrSQL NVARCHAR(3000) --計算式を取得 SET @計算式 = ( SELECT 計算式 FROM テーブル1 WHERE ID = @in計算式ID) SELECT @RowCnt = @@ROWCOUNT,@ErrorSave = @@ERROR --データが取得できなかったり、エラーが発生したらエラー IF (@RowCnt = 0) OR (@ErrorSave != 0) GOTO PGMERR --式が読み取れなかったらエラー IF (@計算式 IS NULL) GOTO PGMERR SET @StrSQL = N'SELECT *,(' + @計算式 + ') ''' + @計算式 + '''' SET @StrSQL = @StrSQL + N' FROM テーブル2' EXEC SP_EXECUTESQL @StrSQL SELECT @ErrorSave = @@ERROR --エラーが発生したらエラー IF (@ErrorSave != 0) GOTO PGMERR PGMEND: --成功はステータス1を返す RETURN(1) GOTO PGMEXIT PGMERR: --失敗はステータス-1を返す RETURN(-1) GOTO PGMEXIT PGMEXIT:

mybigbaby
質問者

補足

プログラムまで考えてくれてありがとうございますm(_ _)m そこで、質問があるのですが…。 このプログラムは、プロシージャのところに書けばよいのでしょうか? でも、プロシージャにはRETURNは使えないようなので、 FUNCTIONになるのでしょうか? 初歩的な質問で申し訳ありません。 オラクルは、テーブル・ビューしかさわった事のない初心者なので、 もしよろしければ、教えて頂けないでしょうか?

関連するQ&A

  • ストアドプロシージャ

    ストアド初心者ですが Oracle 9iのストアドプロシージャを作成したいのですが 全くわからず困っています。 とりあえず、以下のテーブルが既に存在し 受注番号がわかっていて、商品名、数量、単価の変更を ストアドプロシージャでおこなうにはどのようにすればよいでしょうか? ご教授お願い致します。 ********************************************** テーブル名:TEST 項目1:受注番号 項目2:商品名 項目3:数量 項目4:単価 項目5:受注日 PS. ストアドのわかりやすい解説書やホームページ お知りの方いらっしゃいましたら、ご教授お願い致します。

  • ストアドプロシージャでトランザクション処理をするにはどうすれば良いので

    ストアドプロシージャでトランザクション処理をするにはどうすれば良いのでしょうか? 複数のテーブルの行をストアドプロシージャで一括削除したいのですが、 エラーが発生した場合は、ロールバックしたいと思っています。 たとえば、 create table A (id INT, name VARCHAR(32)); // idと名前を持つテーブルA create table B (id INT, address TINYTEXT); // idと住所を持つテーブルB の二つのテーブル(idで紐付け)で、 Aの行が削除されたらBの行を削除するが、Bの削除でエラーが出た場合はAの削除をロールバックする。 という処理を行いたいのです。(ロールバックが可能であれば、ストアドプロシージャでなくても構いません。) どのように書けば良いのでしょうか? よろしくお願いします。

    • ベストアンサー
    • MySQL
  • Accessからoracleのストアドプロシージャを呼び出したい。

    はじめまして。 いきなりですが質問させてください。 Accessからoracleのデータベース内に有るストアドプロシージャを使いたい(ボタンを押したらoracleのプロシージャが起動するイメージ)のですがAccessのVBAからはどのようにすれば使用できるのでしょうか? 色々調べて見たのですがVBからのはよく有るのですがVBAからは見つけられませんでした。 ODBCで繋げて呼び出しが出来たらなと思っています 無理ならば他の方法でも構いません。 よろしくお願いします。 使用環境 Access:2002 oracle:Oracle9i Enterprise Edition Release 9.2.0.1.0

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

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

  • ストアドプロシージャよりファイルを消したい

    ストアドプロシージャの中でSQLの結果よりあるファイル(テーブルでなく txtやdocなどのファイルです)を削除したいのですが、どのようにすれば 実現できるのでしょうか。 環境はSQL SERVERです。 初心者の質問で申し訳ないです。

  • ストアドプロシージャの作成

    MySQLでストアドプロシージャを作成しようと試みているのですが、 分からない事があります。 引数に、テーブルのカラムを指定したいんです。 具体的には、 func(column1, 100) などとして、 select * from table where finc func(column1, 100) > 1000 tableのcolumn1には数字が入っていて、引数の100と計算をして、 1000より大きい結果を返す・・・ みたいな感じです。

    • ベストアンサー
    • MySQL
  • ストアドプロシージャのファイルサイズの調べ方

    お世話になります。 オラクルに登録したストアドプロシージャのファイルサイズを調べる手段についてお聞きしたいと思います。 クライアントでテキストファイルに落すこと無く、サーバーで登録してあるプロシージャのファイルサイズを一覧で取得するようなバッチ処理を考えています。 プロシージャのファイルサイズを取得できるのか、よく分からないのですが、ご存知の方、お知らせください。 サーバー環境 windowsNT oracle8

  • ストアドプロシージャで別DBに接続

    Oracleのマテリアライズドビューのデータを SQL Server 2008のDBに毎晩取り込む処理を作る必要があり、方法を検討中です。 SQL Serverが稼働しているWindows Server 2003のマシンから、 毎晩タスクで起動させて実行することを考えています。 SQL Serverのストアドプロシージャで実現できないかと考えているのですが、 ストアドプロシージャだけで実現可能でしょうか? Oracleに接続してビューのデータを取得し、それに基づいて、 SQL ServerのDB内のテーブルのデータ追加、更新、削除等を行います。 単純なコピーではなく、データ加工や変換等の処理も行います。 経験がないので、実現可能かというところから教えて下さい。 実現不可能なら、他にどのような選択肢があるか教えていただけると助かります。 よろしくお願いします。

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

    ストアドプロシージャで、Accessのクエリーを実行させテーブルの中の指定したIDのデータを削除させるという流れなのですが・・ 以下のソースで実行はできるのですが、削除ができていないので原因がわかりません。アドバイスお願いします。 package CallableStatement; import java.sql.*; import java.io.*; public class cCallableStatement { public static void main(String[] args) { Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); Connection db=DriverManager.getConnection("jdbc:odbc:sample","",""); CallableStatement cllDelete; int ID = 3;        // 削除 cllDelete = db.prepareCall("{call DELETE(?)}"); cllDelete.setInt(1,ID); cllDelete.executeUpdate(); } } 環境はwin2000 pro forte for java 4.0 jdk : 1.4 データベース: Access2000

  • 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して確認するくらいしか方法はありませんでしょうか? 申し訳ございませんが、もしご存知の方、ご教示いただけませんでしょうか? なお、設定やマシン環境で記述不足等ありましたら、ご指摘いただければと思います。 以上です。よろしくお願いします