oci_execute
(PHP 5, PECL OCI8 >= 1.1.0)
oci_execute — Ejecuta una sentencia
Descripción
$statement
[, int $mode = OCI_COMMIT_ON_SUCCESS
] )
Ejecuta la sentencia dada por statement anteriormente devuelta
desde oci_parse().
Después de la ejecución, las sentencias como INSERT, por omisión, contendrán datos consolidados en la base de datos. Para sentencias como SELECT, la ejecución realiza la lógica de la consulta. Los resultados de las consultas pueden obtenerse posteriormente en PHP con funciones como oci_fetch_array().
Cada sentencia analizada podría ser ejecutada múltiples veces, ahorrando el coste de un reanálisis. Esto se utlilza comúnmente para sentencias INSERT cuando los datos están vinculados con oci_bind_by_name().
Parámetros
-
statement -
Un identificador de sentencia de OCI válido.
-
mode -
Este segundo parámetro opcional puede ser una de las siguietnes constantes:
Modos de ejecución Constante Descripción OCI_COMMIT_ON_SUCCESSConsolida automáticamente todos los cambios pendientes de esta conexión cuando la sentencia ha tenido éxito. Es la predetermianda. OCI_DESCRIBE_ONLYDispone los metadatos de la consulta a funciones como oci_field_name(), pero no crea un conjunto de resultados. Cualquier llamada de obtención subsiguiente, como con oci_fetch_array(), fallará. OCI_NO_AUTO_COMMITNo consolida automáticamete los cambios. Antes de PHP 5.3.2 (PECL OCI8 1.4) use OCI_DEFAULT, la cual es equivalente aOCI_NO_AUTO_COMMIT.Al usar el modo
OCI_NO_AUTO_COMMITse inicia o continua una transacción. Las transacciones son automáticamente revertidas cuando la conexión se cierra, o cuando el script finaliza. Para consolidar explícitamente una trasacción, invoque a oci_commit(), o a oci_rollback() para abortarla.Cuando se insertar o actualizan datos, se recomienda usar transacciones para mantener la consistencia de datos relacionales y por razones de rendimiento.
Si se usa el modo
OCI_NO_AUTO_COMMITpara cualquier sentencia, incluyendo consultas, y no se llama posteriormente a oci_commit() o oci_rollback(), OCI8 realizará una reversión al final del script incluso si no se modificó ningún dato. Para evitar reversiones innecesarias, muchos scripts no usan el modoOCI_NO_AUTO_COMMITpara consultas o PL/SQL. Tenga cuidado de asegurar la consistencia transaccional apropiada para la aplicación cuando use oci_execute() con diferentes modos en el mismo script.
Valores devueltos
Devuelve TRUE en caso de éxito o FALSE en caso de error.
Ejemplos
Ejemplo #1 oci_execute() para consultas
<?php
$conn = oci_connect('hr', 'welcome', 'localhost/XE');
$stid = oci_parse($conn, 'SELECT * FROM employees');
oci_execute($stid);
echo "<table border='1'>\n";
while ($fila = oci_fetch_array($stid, OCI_ASSOC+OCI_RETURN_NULLS)) {
echo "<tr>\n";
foreach ($fila as $elemento) {
echo " <td>" . ($elemento !== null ? htmlentities($elemento, ENT_QUOTES) : "") . "</td>\n";
}
echo "</tr>\n";
}
echo "</table>\n";
?>
Ejemplo #2 Ejemplo de oci_execute() sin especificar un modo
<?php
// Antes de ejecutarlo, cree la tabla:
// CREATE TABLE MYTABLE (col1 NUMBER);
$conn = oci_connect('hr', 'welcome', 'localhost/XE');
$stid = oci_parse($conn, 'INSERT INTO mytab (col1) VALUES (123)');
oci_execute($stid); // La fila se consolida y es visible inmediatamente a otros usuarios
?>
Ejemplo #3 Ejemplo de oci_execute() con OCI_NO_AUTO_COMMIT
<?php
// Antes de ejecutarlo, cree la tabla:
// CREATE TABLE MYTABLE (col1 NUMBER);
$conn = oci_connect('hr', 'welcome', 'localhost/XE');
$stid = oci_parse($conn, 'INSERT INTO mytab (col1) VALUES (:bv)');
oci_bind_by_name($stid, ':bv', $i, 10);
for ($i = 1; $i <= 5; ++$i) {
oci_execute($stid, OCI_NO_AUTO_COMMIT); // use OCI_DEFAULT para PHP <= 5.3.1
}
oci_commit($conn); // consolida todos los nuevos valores: 1, 2, 3, 4, 5
?>
Ejemplo #4 Ejemplo de oci_execute() con diferentes modos de consolidación
<?php
// Antes de ejecutarlo, cree la tabla:
// CREATE TABLE MYTABLE (col1 NUMBER);
$conn = oci_connect('hr', 'welcome', 'localhost/XE');
$stid = oci_parse($conn, 'INSERT INTO mytab (col1) VALUES (123)');
oci_execute($stid, OCI_NO_AUTO_COMMIT); // datos no consolidados
$stid = oci_parse($conn, 'INSERT INTO mytab (col1) VALUES (456)');
oci_execute($stid); // consolida tanto el valor 123 como 456
?>
Ejemplo #5 Ejemplo de oci_execute() con
OCI_DESCRIBE_ONLY
<?php
$conn = oci_connect('hr', 'welcome', 'localhost/XE');
$stid = oci_parse($conn, 'SELECT * FROM locations');
oci_execute($s, OCI_DESCRIBE_ONLY);
for ($i = 1; $i <= oci_num_fields($stid); ++$i) {
echo oci_field_name($stid, $i) . "<br>\n";
}
?>
Notas
Nota:
Las transacciones son automáticamente revertidas cuando se cierran las conexiones, o cuando el script finaliza, lo que ocurra antes. Para consolidar explícitamente una transacción, invoque a oci_commit().
Cualquier llamada a oci_execute() que use el modo
OCI_COMMIT_ON_SUCCESS, explícitamente o por omisión, consolidará cualquier transacción no consolidada anterioremente.Cualquier sentencia DDL de Oracle, como CREATE o DROP, consolidará automáticamente cualquier transacción no consolidada.
Nota:
Debido a que la función oci_execute() generalmente envía la sentencia a la base de datos, oci_execute() puede identificar algunos errores de sintaxis que no identifica la función ligera local oci_parse().