PHP 8.5.0 Alpha 2 available for testing

oci_execute

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

oci_executeEjecuta un comando SQL de Oracle

Descripción

oci_execute(resource $statement, int $mode = OCI_COMMIT_ON_SUCCESS): bool

Ejecuta una consulta statement previamente devuelta por la función oci_parse().

Tras la ejecución, las consultas como INSERT tendrán por omisión los datos validados (cometidos) en la base de datos. Para consultas como SELECT, la ejecución realiza la lógica de la consulta. Los resultados de la consulta pueden ser recuperados por PHP con funciones como oci_fetch_array().

Cada consulta analizada puede ser ejecutada varias veces, por lo que no es necesario analizarlas de nuevo. Esto es práctico para consultas de tipo INSERT cuando los datos están vinculados mediante la función oci_bind_by_name().

Parámetros

statement

Un identificador de consulta OCI válido.

mode

Un segundo argumento opcional puede tomar una de las constantes siguientes:

Modos de ejecución
Constante Descripción
OCI_COMMIT_ON_SUCCESS Validación automática en la conexión cuando la consulta ha sido ejecutada con éxito. Este es el comportamiento por omisión.
OCI_DESCRIBE_ONLY Hace disponibles los metadatos de la consulta a funciones como oci_field_name() pero no crea un conjunto de resultados. Cualquier llamada a funciones de recuperación como oci_fetch_array() fallará.
OCI_NO_AUTO_COMMIT No valida automáticamente las modificaciones.

El uso del modo OCI_NO_AUTO_COMMIT inicia o continúa una transacción. Las transacciones son automáticamente anuladas cuando la conexión se cierra o cuando el script termina. Llame explícitamente a la función oci_commit() para validar la transacción o a la función oci_rollback() para anularla.

Al insertar o actualizar datos, el uso de transacciones es altamente recomendado para garantizar la consistencia relacional de los datos, así como por un significativo aumento de rendimiento.

Si el modo OCI_NO_AUTO_COMMIT es utilizado para todas las operaciones incluyendo consultas, y las funciones oci_commit() y oci_rollback() nunca son llamadas, OCI8 realizará una anulación al final del script incluso si los datos han cambiado. Para evitar este comportamiento, la mayoría de los scripts no utiliza el modo OCI_NO_AUTO_COMMIT para consultas o procedimientos almacenados PL/SQL. Asegúrese de la consistencia transaccional apropiada de sus aplicaciones al utilizar la función oci_execute() con diferentes modos en el mismo script.

Valores devueltos

Esta función retorna true en caso de éxito o false si ocurre un error.

Ejemplos

Ejemplo #1 Ejemplo con 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 (
$row = oci_fetch_array($stid, OCI_ASSOC+OCI_RETURN_NULLS)) {
echo
"<tr>\n";
foreach (
$row as $item) {
echo
" <td>" . ($item !== null ? htmlentities($item, ENT_QUOTES) : "") . "</td>\n";
}
echo
"</tr>\n";
}
echo
"</table>\n";

?>

Ejemplo #2 Ejemplo con oci_execute() sin especificar modo

<?php

// Antes de la ejecución, 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 es validada y es inmediatamente visible por otros usuarios

?>

Ejemplo #3 Ejemplo con oci_execute() y OCI_NO_AUTO_COMMIT

<?php

// Antes de la ejecución, 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);
}
oci_commit($conn); // valida todos los nuevos valores: 1, 2, 3, 4, 5

?>

Ejemplo #4 Ejemplo con oci_execute() y diferentes modos en el mismo script

<?php

// Antes de la ejecución, 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 cometidos

$stid = oci_parse($conn, 'INSERT INTO mytab (col1) VALUES (456)');
oci_execute($stid); // valida tanto los valores 123 como 456

?>

Ejemplo #5 Ejemplo con oci_execute() y 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 anuladas cuando las conexiones se cierran, o cuando el script termina, según lo que ocurra primero. Llame explícitamente a la función oci_commit() para validar una transacción.

Cualquier llamada a la función oci_execute() que utilice el modo OCI_COMMIT_ON_SUCCESS explícita o implícitamente validará todas las transacciones en curso.

Todas las consultas Oracle DDL como CREATE o DROP validarán todas las transacciones en curso.

Nota:

Debido a que la función oci_execute() generalmente envía la consulta a la base de datos, la función oci_execute() puede identificar errores de sintaxis de la consulta que la función oci_parse() pudo no detectar.

Ver también

add a note

User Contributed Notes 1 note

up
3
tower98 at gmail dot com
14 years ago
Notice (PHP 5.2.12-pl0-gentoo):
You can parse empty query, you can execute empty query (returns true), but you cannot fetch data from empty query. So, if you provide query as variable, make sure it isn't empty.

<?php
$q
= oci_parse($c, "");
if(
$q != false){
// parsing empty query != false
if(oci_execute($q){
// executing empty query != false
if(oci_fetch_all($q, $data, 0, -1, OCI_FETCHSTATEMENT_BY_ROW) == false){
// but fetching executed empty query results in error (ORA-24338: statement handle not executed)
$e = oci_error($q);
echo
$e['message'];
}
}
else{
$e = oci_error($q);
echo
$e['message'];
}
}
else{
$e = oci_error($link);
echo
$e['message'];
}
?>
To Top