oci_free_statement

(PHP 5, PHP 7, PHP 8, PECL OCI8 >= 1.1.0)

oci_free_statement釋放與語句或遊標關聯的所有資源

說明

oci_free_statement(resource $statement): bool

釋放與 Oracle 的遊標或語句關聯的資源,這些資源是作為 oci_parse() 的結果接收到的,或者從 Oracle 獲得的。

引數

statement

有效的 OCI 語句識別符號。

返回值

成功時返回 true,失敗時返回 false

添加註釋

使用者貢獻的註釋 3 個註釋

Jen M.
15 年前
oci_free_statement 並不總是釋放遊標。我有一個查詢,我在迴圈中執行了以下函式

OCIParse
OCIExecute
Oci_fetch_assoc
(獲取一些欄位值)
OciFreeStatement

我沒有指定使用遊標,但我遇到了“超過最大
開啟的遊標”錯誤。在我的程式碼中,我有一個“select * from table_with_lobs”查詢。當我將查詢更改為“select a, b, c, from table_with_lobs”(我指定了實際的列名,這些列不是 LOB 欄位)時,錯誤訊息消失了,我不必訴諸於在 Oracle 中提高 max_open_cursors 的值。
rada at instinctive dot it
16 年前
如果您使用遊標,請確保釋放語句 *和* 遊標,尤其是在可能再次執行 proc/遊標的情況下(例如,使用不同的引數)。

<?php

oci_execute
($stmt);
oci_execute($crsr);

// 遍歷遊標...

oci_free_statement($stmt);
oci_free_statement($crsr);
?>

您需要顯式地執行此操作,例如關閉連線似乎不會釋放遊標。
passerbyxp at gmail dot com
11 年前
已釋放的語句不是“empty()”,它仍然是一個資源

<?php
$con
=oci_connect(/*connect*/);
$q=oci_parse($con,"SELECT sysdate FROM dual");
var_dump($q); // resource(5) of type (oci8 statement)
var_dump(empty($q)); // bool(false)
var_dump(oci_statement_type($q)); // string(6) "SELECT"
echo "------\n";
oci_execute($q);
var_dump($q); // 與上面相同
var_dump(empty($q));
var_dump(oci_statement_type($q));
echo
"------\n";
oci_free_statement($q);
var_dump($q); // resource(5) of type (Unknown)
var_dump(empty($q)); // bool(false)
var_dump(oci_statement_type($q)); // 產生警告並返回 false
oci_close($con);
?>

到目前為止,我無法想到一種無需使用額外標誌即可確定語句是否已釋放的方法...
To Top