Ver Mensaje Individual
  #8  
Antiguo 12-05-2008
Avatar de lucasarts_18
lucasarts_18 lucasarts_18 is offline
Miembro
 
Registrado: mar 2005
Ubicación: Villa Alemana,Chile
Posts: 1.087
Reputación: 23
lucasarts_18 Va por buen camino
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 .-
__________________
No todo es como parece ser...
Responder Con Cita