El identificador interno que cuenta las conexiones debe valer cero
para poder cerrar la conexión.
<?php
$conn = oci_connect('hr', 'welcome', 'localhost/XE');
if (!$conn) {
$e = oci_error();
trigger_error(htmlentities($e['message'], ENT_QUOTES), E_USER_ERROR);
}
$stid = oci_parse($conn, 'SELECT * FROM departments'); // esto incrementa el contador interno $conn
oci_execute($stid);
oci_fetch_all($stid, $res);
var_dump($res);
oci_close($conn);
// $conn ya no es utilizable en el script pero la conexión subyacente a
// la base de datos sigue abierta mientras $stid no sea liberada.
var_dump($conn); // muestra NULL
// Mientras PHP espera, el hecho de consultar la vista V$SESSION de Oracle
// en un terminal mostrará que un usuario sigue conectado.
sleep(10);
// Cuando $stid es liberada, la conexión a la base de datos será físicamente cerrada
oci_free_statement($stid);
// Mientras PHP espera, el hecho de consultar la vista V$SESSION de Oracle
// en un terminal mostrará que el usuario se ha desconectado.
sleep(10);
?>