(PHP 5, PECL OCI8 >= 1.1.0)
oci_execute — Ejecuta una sentencia
$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().
statement
Un identificador de sentencia de OCI válido.
mode
Este segundo parámetro opcional puede ser una de las siguietnes constantes:
Constante | Descripción |
---|---|
OCI_COMMIT_ON_SUCCESS |
Consolida automáticamente todos los cambios pendientes de esta conexión cuando la sentencia ha tenido éxito. Es la predetermianda. |
OCI_DESCRIBE_ONLY |
Dispone 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_COMMIT |
No consolida automáticamete los cambios. Antes de PHP
5.3.2 (PECL OCI8 1.4)
use OCI_DEFAULT , la cual es equivalente
a OCI_NO_AUTO_COMMIT . |
Al usar el modo OCI_NO_AUTO_COMMIT
se 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_COMMIT
para 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 modo OCI_NO_AUTO_COMMIT
para 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.
Devuelve TRUE
en caso de éxito o FALSE
en caso de error.
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";
}
?>
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().