PHP 8.4.6 Released!

oci_execute

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

oci_executeExecuta uma instrução

Descrição

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

Executa a instrução do parâmetro statement anteriormente retornada por oci_parse().

Após a execução, instruções como INSERT terão os dados confirmados no banco de dados por padrão. Para instruções como SELECT, a execução executa a lógica da consulta. Os resultados da consulta podem ser posteriormente obtidos em PHP com funções como oci_fetch_array().

Cada instrução analisada pode ser executada várias vezes, economizando o custo de nova análise. Isso é comumente usado para instruções INSERT quando os dados são vinculados com oci_bind_by_name().

Parâmetros

statement

Um identificador de instrução OCI válido.

mode

Um segundo parâmetro opcional pode ser uma das seguintes constantes:

Modos de execução
Constante Descrição
OCI_COMMIT_ON_SUCCESS Confirma automaticamente todas as alterações pendentes para esta conexão quando a instrução for bem-sucedida. Este é o padrão.
OCI_DESCRIBE_ONLY Disponibiliza metadados de consulta para funções como oci_field_name(), mas não cria um conjunto de resultados. Qualquer chamada de busca subsequente, como oci_fetch_array(), falhará.
OCI_NO_AUTO_COMMIT Não confirma alterações automaticamente.

O uso do modo OCI_NO_AUTO_COMMIT inicia ou continua uma transação. As transações são revertidas automaticamente quando a conexão é fechada ou quando o script termina. Explicitamente, chame oci_commit() para confirmar uma transação, ou oci_rollback() para abortá-la.

Ao inserir ou atualizar dados, o uso de transações é recomendado para consistência de dados relacionais e por questões de desempenho.

Se o modo OCI_NO_AUTO_COMMIT for usado para qualquer instrução, incluindo consultas, e oci_commit() ou oci_rollback() não for chamada posteriormente, o OCI8 executará uma reversão no final do script, mesmo que nenhum dado tenha sido alterado. Para evitar uma reversão desnecessária, muitos scripts não usam o modo OCI_NO_AUTO_COMMIT para consultas ou PL/SQL. Tenha cuidado para garantir a consistência transacional apropriada para a aplicação ao usar oci_execute() com modos diferentes no mesmo script.

Valor Retornado

Retorna true em caso de sucesso ou false em caso de falha.

Exemplos

Exemplo #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 (
$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) : "&nbsp;") . "</td>\n";
}
echo
"</tr>\n";
}
echo
"</table>\n";

?>

Exemplo #2 Exemplod de oci_execute() sem especificar um modo

<?php

// Antes de executar, crie a tabela:
// 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); // A linha é confirmada e fica imediatamente visível para outros usuários

?>

Exemplo #3 Exemplo de oci_execute() com OCI_NO_AUTO_COMMIT

<?php

// Antes de executar, crie a tabela:
// 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); // confirma todos os novos valores: 1, 2, 3, 4, 5

?>

Exemplo #4 Exemplo de oci_execute() com diferentes modos de confirmação

<?php

// Antes de executar, crie a tabela:
// 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); // dados não confirmados

$stid = oci_parse($conn, 'INSERT INTO mytab (col1) VALUES (456)');
oci_execute($stid); // confirma tanto 123 quanto 456

?>

Exemplo #5 Exemplo de oci_execute() com 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:

As transações são revertidas automaticamente quando as conexões são fechadas ou quando o script termina, o que ocorrer primeiro. Explicitamente chame oci_commit() para confirmar uma transação.

Qualquer chamada para oci_execute() que utilize o modo OCI_COMMIT_ON_SUCCESS explicitamente ou por padrão confirmará qualquer transação anterior não confirmada.

Qualquer instrução DDL do Oracle, como CREATE ou DROP, confirmará automaticamente qualquer transação não confirmada.

Nota:

Como a função oci_execute() geralmente envia a instrução para o banco de dados, oci_execute() pode identificar alguns erros de sintaxe de instrução que a função oci_parse() (local e mais leve) não consegue.

Veja Também

  • oci_parse() - Prepara uma instrução Oracle para execução

adicione uma nota

Notas Enviadas por Usuários (em inglês) 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