Do You PHP?    
Search Engine Optimization  php5 powerd  Valid XHTML 1.0!  Valid CSS!  このサイトのはてなブックマーク数 



last updated
2002/01/20

counter hits
since 1999/11/06


OCI8関数を使用していると、オープンしたカーソル数が最大値をオーバーする

現象 Oracle8関数で、INSERT/UPDATE/DELETEなどのSQL文をOCI_DEFAULTモードで繰り返し実行し、commitを実行しないままでいると、「オープンしたカーソル数の最大値をオーバー」でエラーが発生する
主な原因

以下の原因が考えられます。

  • Oracle8関数では、INSERT/UPDATE/DELETE文でもカーソルを1つオープンしているため、OCIFreeStatement関数を使用してカーソルをクローズする必要がある
対応策

以下の修正を行い、再度動作を確認してみてください。

  • OCIBindByName関数を使用する
  • INSERT/UPDATE/DELETE文でも、SQLの実行後にカーソルのクローズ処理(OCIFreeStatement)を行う
サンプル ●PHPスクリプト

<?php
    $conn = OCILogon( "scott", "tiger", "orcl");

    $sql  = "INSERT INTO test VALUES(:col1,:col2)";
    for ($i = 0; $i < $cnt; $i++) {
        $sql  = "INSERT INTO test VALUES(".$i.", 'TEST".$i."')";
        $parse = OCIParse($conn, $sql);
        OCIExecute($parse, OCI_DEFAULT );

        // 必ず実行する
        OCIFreeStatement($parse);
    }

    OCICommit($conn);
    OCILogoff($conn);
?>



About This Site |  Privacy Policy |  Contact
Copyright © 1999 - 2002 by Hideyuki SHIMOOKA all rights reserved.