<?php
// Este ejemplo inserta un id y un nombre, y luego actualiza el salario
// Cree la tabla con:
// CREATE TABLE mytab (id NUMBER, salary NUMBER, name VARCHAR2(40));
//
// Basado en el ejemplo original de ROWID de thies at thieso dot net (980221)
$conexión = oci_connect('hr', 'welcome', 'localhost/XE');
if (!$conexión) {
$m = oci_error();
trigger_error(htmlentities($m['message']), E_USER_ERROR);
}
$sql = "INSERT INTO mytab (id, name) VALUES(:id_bv, :name_bv)
RETURNING ROWID INTO :rid";
$ins_stid = oci_parse($conexión, $sql);
$id_fila = oci_new_descriptor($conexión, OCI_D_ROWID);
oci_bind_by_name($ins_stid, ":id_bv", $id, 10);
oci_bind_by_name($ins_stid, ":name_bv", $nombre, 32);
oci_bind_by_name($ins_stid, ":rid", $id_fila, -1, OCI_B_ROWID);
$sql = "UPDATE mytab SET salary = :salary WHERE ROWID = :rid";
$upd_stid = oci_parse($conexión, $sql);
oci_bind_by_name($upd_stid, ":rid", $id_fila, -1, OCI_B_ROWID);
oci_bind_by_name($upd_stid, ":salary", $salario, 32);
// Los identificadores y los nombres a insertar
$datos = array(1111 => "Larry",
2222 => "Bill",
3333 => "Jim");
// El salario para cada persona
$salario = 10000;
// Insertar e inmediatamente actualizar cada fila
foreach ($datos as $id => $nombre) {
oci_execute($ins_stid);
oci_execute($upd_stid);
}
$id_fila->free();
oci_free_statement($upd_stid);
oci_free_statement($ins_stid);
// Mostrar las nuevas filas
$stid = oci_parse($conexión, "SELECT * FROM mytab");
oci_execute($stid);
while ($fila = oci_fetch_array($stid, OCI_ASSOC+OCI_RETURN_NULLS)) {
var_dump($fila);
}
oci_free_statement($stid);
oci_close($conexión);
?>