(PHP 5, PHP 7, PHP 8, PECL OCI8 >= 1.1.0)
oci_execute — Executa uma instrução
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().
statement
Um identificador de instrução OCI válido.
mode
Um segundo parâmetro opcional pode ser uma das seguintes constantes:
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.
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) : " ") . "</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";
}
?>
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
ouDROP
, 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.