Hola de nuevo, jeje
Bueno, después de tamto tiempo de hacer algunas pruebas, leer bastante sobre el tema, estoy utilizando todos los objetos de oracle a la perfección desde php.
Solo una acotación, el código de hector es de php 4, php 5 cambio el nombre de algunas funciones.
Mi duda era como gatillar SP Oracle desde ADOdb. aquí dejo el código de cómo llevar a cabo esta tarea.
Código PHP:
function listarClientes(){
// para gatillarlo desde las librerías ADOdb
global $db;
$prazonsocial = 'serv';
$db->AutoCommit = FALSE;
$db->SetFetchMode(ADODB_FETCH_ASSOC);
$stmt = $db->PrepareSP("BEGIN adm_clientes.Lista(:prazonsocial,:plista); END;");
$db->InParameter($stmt, $prazonsocial, 'prazonsocial');
$db->OutParameter($stmt, $cur, 'plista', -1, OCI_B_CURSOR);
$result = $db->Execute($stmt);
if (!$result) {
die('Error');
}
while($row = $result->FetchRow())
$clientes[] = $row;
return $clientes;
}
Código PHP:
function listarClientes(){
//para gatillarlos desde OCI
$conn = oci_connect("logisticpoint", "logisticpoint", "pchome");
$cursor = oci_new_cursor($conn);
$sql = "BEGIN adm_clientes.Lista(:prazonsocial,:plista); END;";
$stmt = oci_parse($conn, $sql);
oci_bind_by_name($stmt, "prazonsocial", $prazonsocial);
oci_bind_by_name($stmt, "plista", $cursor, -1, OCI_B_CURSOR);
oci_execute($stmt);
oci_execute($cursor);
//oci_fetch_assoc($cursor);
while ($row = oci_fetch_assoc($cursor))
$clientes[] = $row;
return $clientes;
}
Ahora, otro tema que estuve peliando bastante ya que no encontré información satisfactoria sobre como gatillar SP cuando uno de sus parámetros es de tipo %rowtype, pero acá traigo la solución para que no se quebren la cabeza porque yo ya lo hice...jeje
Código PHP:
function registrarse(){
$conn = oci_connect('logisticpoint', 'logisticpoint', 'pchome') or die;
$param1 = "Prueba";
$param2 = "15/07/2008";
$param3 = 55;
$sql = "declare pdatos prueba%rowtype;".
"begin pdatos.columna1 := :param1;".
"pdatos.columna2 := :param2;".
"pdatos.columna3 := :param3;".
"adm_clientes.registrar(pdatos => pdatos);end;";
$sth = oci_parse($conn, $sql);
oci_bind_by_name($sth, ":param1", $param1, 10);
oci_bind_by_name($sth, ":param2", $param2, 10);
oci_bind_by_name($sth, ":param3", $param3, 10);
oci_execute($sth);
}
Esperando que a mas de uno que este trabajando en oracle le pueda servir, como conclusión me he quedado con las instrucciones nativas de php y desatarme de las librerías ADOdb, ya que me parecen que son mucho mas versatil las conexiones nativas OCI....y por asunto de velocidad también...
Gracias a todos por este hilo, hasta el próximo capítulo....
Saludos .-