| 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);
?>
|
|