« Oracleとの接続 | トップページ | 参考サイト »

2007年5月15日 (火)

StoredProc

Delphi4PHPにはStoredProcクラスがあります。
一見Delphi(pascal)のコンポーネントと同じように見えるけど、Paramの指定はParamByNameでは出来ません・・・。
プロパティのParams(array型)のところで指定してやるようです。


p_test(param1,param2)のようなストアドの場合で、下記のような値を入れたい場合、

param1 : 111
param2 : test

paramsには

---------
111
test
---------

こんな感じで入れておきます(プロパティのところの場合)。

arrayだとどの引き数も同じ種類になるやん! なんでParamByNameが無いねん! ヽ(`Д´)ノ

と怒っていたら、PHPの場合はこれでいいっぽい・・・。
さんざん「型が違う!」と怒られ続けたDel厨の魂100まで・・・。


しかーし

oci8 error: [907: ORA-00907: 右カッコがありません。]

Oracleのストアドの場合、bugる・・・orz
どうやら、InterBase以外のは想定してないぽ(イカス・・・)。

舐めるようにニュースグループを見ていたら、MySQLの場合はdbtables.inc.phpのbuildQueryファンクションを以下のように直せばいいらしい。

//$result="select * from $this->_storedprocname$pars";

上記の部分をコメントアウトしといて、

$result="$this->_storedprocname$pars";

もしくは

$result="EXECUTE $this->_storedprocname$pars";

に変更。

※試してません!


で、Oracleの場合、ソースを必死で解読しつつ色々試してみたのですが以下な感じで動くようになりました。

//$result="select * from $this->_storedprocname$pars";

コメントアウトしといて、その下に以下を付け加える(returnの上)。

//ここから
if ($this->Database->DriverName == "oci8"){
 $result= "begin $this->_storedprocname$pars; end;";
 $this->_limitstart = -1;
 $this->_limitcount = -1;
}
else{
 $result="select * from $this->_storedprocname$pars";
}
//ここまで

oci8以外は試してないので、上記の中に入れてません。
そもそもPHP初心者なので、不具合出たらごめんなさい。

|

« Oracleとの接続 | トップページ | 参考サイト »

コメント

コメントを書く



(ウェブ上には掲載しません)


コメントは記事投稿者が公開するまで表示されません。



トラックバック

この記事のトラックバックURL:
http://app.cocolog-nifty.com/t/trackback/70189/15080654

この記事へのトラックバック一覧です: StoredProc:

« Oracleとの接続 | トップページ | 参考サイト »