[Codeigniter-users] ストアドプロシージャのOUT値取得について

Back to archive index

taka koba kobat****@gmail*****
2012年 12月 1日 (土) 19:23:09 JST


戸田様

kobaです。大変ご丁寧なアドバイスありがとうございます!しかも、わざわざ調べていただき恐縮で
す。
複数クエリの実行はドライバによること、また独自関数で処理をまとめるというご提案大変参考になり
ました。コードの分かりやすさを考え、今回は独自関数を作る方向で進めてみようと思います。ありが
とうございましたm(_ _)m

koba


2012年12月1日 12:48 戸田 広 <info****@sciss*****>:

> こんにちは、戸田です。
>
> CodeIgniter でのクエリーは
> 最終的には PHP ネイティブの関数に渡されます。
> ご例示されたような、複数のクエリーをセミコロンで区切って
> 一度に実行するやり方が実行できるか できないかは、
> 対象となる PHP の関数が そのやり方に対応しているか していないか に
> 依存します。
> 例えば、 mysql ドライバーの場合は mysql_query() が実行されていますが、
> これは複数のクエリーを一度に実行することはできません。
>
> 私は、処理はすべてモデルクラス内に泥臭く書いていますので、
> ストアドプロシージャを利用するうえで効率的な方法がないか
> 今回 はじめて確認してみましたが、
> ご例示のような、実行文を2回実行する以上に洗練されたやり方は
> 残念ながら見つけることができませんでした。
>
> CI_Model を継承した MY_Model クラスを作り
> ( /application/core ディレクトリ内に置きます)、
> その中で ご希望の処理を実装したメソッドを作れば
> 各モデルクラスでの記述は減らすことができそうです。
> 簡単に書くと、次のような感じかと思います。
>
> function call_stored_procedure($stored_procedure_name,
> $output_variable_name)
> {
>     $this->db->query('call ' . $stored_procedure_name . '(' .
> $output_variable_name . ')');
>     $query = $this->db->query('select ' . $output_variable_name);
>     return $query->result();
> }
>
>
>
> 以上です。
>
>
>
>
> On 2012/11/30, at 23:35, taka koba wrote:
>
> > はじめてメールさせていただきます。kobaと申します。
> > Codeigniterの扱いにはまだ不慣れな者です。
> > 表題の件、もしお分かりになる方がおりましたらご教授ください。よろしくお願いしますm(_ _)m
> >
> > MySQLでストアドプロシージャーを作り、ストアドプロシージャー実行時の引数に出力値を格納するような処理を考えています。
> >
> > $this->db->query("call cal_total(@num)");
> > $query = $this->db->query("select @num");
> >
> >  ここで cal_total(OUT num INT) はレコードのトータル数を求めて、変数numにその数を格納するようなストアドプロシージャー
> > だとします。とりあえず、上記のようなコードを書くと、$queryには@numカラムに値が入った結果が帰ってくるので、
> > 希望通りの処理ができるのですが書き方としてもう少しスマートな方法はないものかと思い、質問させていただきました(
> > たとえば、$this->db->query("call cal_total(@num); select @num");
> のように1行で記述できるような方法等)。
> >
> > マニュアルを見てみたのですが、希望の処理が見つかりませんでした。出力を得たいストアドプロシージャーをCodeigniter
> > で書きたい場合は、このように実行文を2回書くような方法になるのでしょうか。
> >
> > よろしくお願いいたしますm( _ _ )m
> > _______________________________________________
> > Codeigniter-users mailing list
> > Codei****@lists*****
> > http://lists.sourceforge.jp/mailman/listinfo/codeigniter-users
>
> _______________________________________________
> Codeigniter-users mailing list
> Codei****@lists*****
> http://lists.sourceforge.jp/mailman/listinfo/codeigniter-users
>
-------------- next part --------------
HTMLの添付ファイルを保管しました...
다운로드 



Codeigniter-users メーリングリストの案内
Back to archive index