[PHP-users 25860] ORACLEでSQL実行エラー

天野 義祐 amano @ kscom.co.jp
2005年 6月 17日 (金) 13:22:48 JST


はじめまして。あまのと申します。

php半年未満の若葉マークです。よろしくお願いします。

質問です。

環境
Windows2003SE (32bit)
Apache1.3
php5.0.3
Oracle9.2.0

OCILogonを使ってオラクルに接続してデータを取得すると、数十回に一度の
頻度でエラーが発生します。

エラー内容
Warning: oci_fetch_array() [function.oci-fetch-array]: OCIFetchInto:
ORA-01001: カーソルが無効です。 in d:\htdocs\main.php on line 399

プログラムの概要

  ---ここから----

 /* Oracleに接続 */
$conn = OCILogon(DBUSER,DBPWD,TNSNAME);

/* SQL文の組み立て */
$sql = " select ABC from TESTTABLE where ABC=:val ";

/* パース */
$sql = OCIParse($conn, $sql);

/* バインド */
OCIBindByName($sql, ":val", &$param, -1); //$paramは引数です。

 /* 実行 */
OCIExecute($sql);

 /* 全件をフェッチ */
while ($data = oci_fetch_array ($sqla, OCI_ASSOC)) {
  print "$data[ABC]"; //ここで配列に格納とかしています。
}

 /* リソースの開放 */
OCIFreeStatement($sql);

・・・・
・・・・ さらに他のSQLをパース→バインド→実行→開放しています。
・・・・

 /*Oracleから切断*/
OCILogoff($conn);

  ---ここまで----

補足
・30秒毎に自動更新しています。
・HTMLでフレームを分けており、他のフレームでも上記と同じような処理をしていま
す(自動更新ナシ)

オラクルの初期化パラメータのopen_cursorsを3000にしていますが、
1セッションでカーソルの数が3000以上になることは考えにくいです。

http://bugs.php.net/bug.php?id=8546&edit=3

にあるようなバグに該当するのでしょうか?

php + Oracle の組み合わせでやっている人たちはどのように対処しているのでしょ
うか?
対処方法のアドバイスをください。

よろしくおねがいします。





PHP-users メーリングリストの案内