- ベストアンサー
ストアドプロシージャの作成
MySQLでストアドプロシージャを作成しようと試みているのですが、 分からない事があります。 引数に、テーブルのカラムを指定したいんです。 具体的には、 func(column1, 100) などとして、 select * from table where finc func(column1, 100) > 1000 tableのcolumn1には数字が入っていて、引数の100と計算をして、 1000より大きい結果を返す・・・ みたいな感じです。
- sattakah_goo
- お礼率24% (28/113)
- MySQL
- 回答数1
- ありがとう数0
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
何が分からなくて、どう困っているのか具体的に書いてください。 【関数の定義例】 delimiter // create function ex1(clm_data int,inc_data int) returns int begin return clm_data+inc_data; end; // delimiter ; 【表定義&データ例】 create table t1(c1 int); insert into t1 values(100),(1000),(10000); 【関数の呼び出し例】 select * from t1 where ex1(c1,100)>1000;
関連するQ&A
- MYSQLでストアドプロシージャの引数を二つ
MYSQL初心者で参考書にかじりついてプログラミングしています。 主にDBの内容をPHPで吐き出させるといった使い方をしています。 SQL文があまりにも長ったらしくなってきたのでストアドプロシージャを使いたいのですが、使っているSQL文が (SELECT * FROM .変数. WHERE .変数. LIKE '.変数.') UNION (SELECT * FROM .変数. WHERE .変数. LIKE '.変数.'); となっており、引数を複数使えないとスッキリさせられない状況です。 ストアドプロシージャで複数の引数を設定することはできないのでしょうか?
- ベストアンサー
- MySQL
- ストアドプロシージャについて
Access2003とSQL Server2005Expressです。 初歩的な質問で恐縮です。 以下のストアドプロシージャのデータ取得先を、テーブルではなく 別のストアドプロシージャにしたいのですが、 その方法がわかりません。 CREATE PROCEDURE テスト AS SELECT コード, 社名, 住所, 電話 FROM 名簿 ↑ これをテーブルではなく、別のストアドプロシージャを 指定したのですが・・・。 ここをストアドプロシージャ名にするとエラーになります。 どうすればよろしいでしょうか?
- ベストアンサー
- SQL Server
- ストアドプロシージャが作成されない
●質問の主旨 phpMyAdminのMySQLで ストアドプロシージャの動作確認をしています。 試しに、 delimiter // create procedure pr30() begin select * from tb; select * from tb1l; select * from tb1; end // delimiter ; というプロシージャを作成して、 実行を押しても、画面が全く変化しません。 エラーの表示さえされません。 (もちろんデータベーステーブルのtb、tb1l、tb1が 存在することは確認済みです) また、作成している最中に、 命令文が勝手に消えることもあります。 普通に select * from tb; と、書いていても消えることはないのですが…。 この現象や対策についてご存知の方がいらっしゃいましたら、 アドバイスをお願いします。 ●環境 windows8 xammp1.8.1 phpMyAdmin3.5.2.2 MySQL5.5.27
- ベストアンサー
- MySQL
- MySQLのストアドプロシージャについて
MySQL5.6のストアドプロシージャが返すSELECT結果のフェッチ方法について教えてください。 delimiter $ create procedure sample_proc() begin select * from TEST_TBL; end$ の様なストアドプロシージャがあり、これを他のストアドプロシージャから呼び出して、 ループしながらフェッチしたいのですが、どうすればよいでしょうか。
- 締切済み
- MySQL
- ストアドプロシージャ作成時のエラーについて
お世話になっております。 CREATE PROCEDURE AAA (IN param INT) BEGIN SELECT CD, NAME FROM TBL WHERE TBL_KEY = param; END INTEGER型の引数を渡してVARCHAR型のCD、NAMEを取り出す程度のストアドプロシージャを作成しようとすると 1303 - Can't create a PROCEDURE from within another stored routine. なるエラーが表示されて作成ができません。 このエラーの理由についてコメント頂ければ幸いです。
- ベストアンサー
- MySQL
- ストアドプロシージャについて
いつもお世話になっております。 ストアドプロシージャで以下のようなことをしたいのですが、可能しょうか。 ある会員テーブルから1件のレコード(10個のカラムで構成されている)を取得します。その10個のカラム⇒10個のレコードとして別の一時的なテーブルに格納したいのですが可能でしょうか。 イメージとしては、 (1)Select Clm1,Clm2,Clm3~,Clm10 from MstMember 条件句 (2)(1)の結果をtmpTBLに格納。中身としては、、、 <tmpTBL> Clm1 Clm2 Clm3 Clm10 とここまで書きましたが、やりたいことはSelect文で取得したレコードのカラム1~10を順番に参照したいだけです。 素人質問で大変恐縮ですがご教示頂けますと幸いです。
- ベストアンサー
- SQL Server
- 引数がROWTYPE型のストアドファンクション
引数がROWTYPE型のファンクションを呼び出したいのですが、 SELECT TEST_FUNC(MY_TABLE.*) FROM MY_TABLE; で呼び出せないのでしょうか? (TEST_FUNCの引数はMY_TABLE%ROWTYPE型です) よろしくお願いします。
- ベストアンサー
- Oracle
- ストアドプロシージャの条件分岐に関して
お世話になります。 以下の環境で開発を行っています。 言語:C#(.NET 2008) DB: SQL Server 2008 C#で作成した画面にて入力された値をパラメータで ストアドプロシージャに渡し、その値がNULLでない場合だけ WHERE句にレコード絞り込み条件を与えるSQL文を 考えているのですが、記述方法がわかりません。 (プロシージャ) --------------------------------------------- DECLARE @param1 = '' -- 画面から渡されるパラメータ1 @param2 = '' -- 画面から渡されるパラメータ2 SELECT * FROM TABLE1 A, TABLE2 B -- (1) IF @param1 IS NOT NULL AND @param2 IS NOT NULL -- ここから WHERE A.COLUMN1 = @param1 AND A.COLUMN2 = @param2 ELSE IF @param1 IS NOT NULL AND @param2 IS NULL WHERE A.COLUMN1 = @param1 ELSE IF @param1 IS NULL AND @param2 IS NOT NULL WHERE A.COLUMN2 = @param2 -- ここまで (2) AND A.COLUMN1 = B.COLUMN1 -- (3) AND A.COLUMN2 = B.COLUMN2 -- (4) ------------------------------------------------ 上記の(1)から(4)までをうまく1つにまとめたかたちで記述することができません。 特に上記(2)の効率のよい正しい記述方法がわかりません。 どなたかご教授願えますか? よろしくお願いいたします。
- 締切済み
- SQL Server
- MySQLのストアドプロシージャーでの引数に日本語が使えますか
MySQLのストアドプロシージャーでの引数に日本語が使えますか 自分なりに調べてみましたがはっきりとした結論が得られませんでした。 MySQLのストアドプロシージャーの引数に日本語(2バイト文字)を使うことは可能でしょうか? どのバージョンでも構わないのですが、ストアドプロシージャーを使用するのでVer5.~の最新のバージョンを使うことになるでしょうか。 文字エンコードは全てUTF8を想定しています。
- 締切済み
- MySQL
- ストアドプロシージャ
MySQLでストアドプロシージャを使おうと思ったのですが、root権限でないと実行も定義もできません。 他のユーザーに権限を与えるにはどうしたらいいでしょうか? userテーブルのExecute_privの値は関係ありますか?
- ベストアンサー
- MySQL
補足
回答ありがとうございます。 すごく勘違いしていた気がします・・・ 関数の引数にカラムの値を渡したい場合は、実際に使用する時に select * from t1 where ex1(c1,100)>1000; と書くだけだったのですね。。 てっきり、あらかじめ関数を定義する際に、 create function ex1(clm_data int,inc_data int) のclm_dataに、t1.c1を定義しなくてはならないのかと・・・ もう一度試してみます。ありがとうございました。