array ( 0 => 'index.php', 1 => 'PHP Manual', ), 'head' => array ( 0 => 'UTF-8', 1 => 'es', ), 'this' => array ( 0 => 'function.oci-execute.php', 1 => 'oci_execute', ), 'up' => array ( 0 => 'ref.oci8.php', 1 => 'Funciones de OCI8', ), 'prev' => array ( 0 => 'function.oci-error.php', 1 => 'oci_error', ), 'next' => array ( 0 => 'function.oci-fetch-all.php', 1 => 'oci_fetch_all', ), 'alternatives' => array ( ), 'source' => array ( 'lang' => 'es', 'path' => 'reference/oci8/functions/oci-execute.xml', ), ); $setup["toc"] = $TOC; $setup["toc_deprecated"] = $TOC_DEPRECATED; $setup["parents"] = $PARENTS; manual_setup($setup); ?>
(PHP 5, PHP 7, PHP 8, PECL OCI8 >= 1.1.0)
oci_execute — Ejecuta una sentencia
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.
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
oDROP
, 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().