Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   PHP (https://www.clubdelphi.com/foros/forumdisplay.php?f=15)
-   -   Ejecutar y rescatar valores desde Oracle (https://www.clubdelphi.com/foros/showthread.php?t=55319)

lucasarts_18 14-04-2008 05:39:15

Ejecutar y rescatar valores desde Oracle
 
Hola a todos:

He leído la documentación de las funciones disponibles de oracle para php, pero no encuentro demasiados ejemplos que me ayuden en esta tarea, recurro a ustedes si algo de esto saben.

Necesito rescatar los valores obtenidos de un package y un stored procedure de oracle desde php.:rolleyes:

Esto es por ejemplo, tengo un packege (pkgr_despacho) y este package tiene un procedimiento almacenado que me devuelve un listado de los despachos pendientes por emitir, es decir me devuelve un cursor de datos.

¿Cómo puedo obtener estos valores desde php para procesarlos fila a fila y poder mostrarle en forma de grilla en html?

Necesito documentación y ejemplos.:p:p

Estoy por comenzar un proyecto en php oracle y no he encontrado mucha información sobre esto.:(

Espero que puedan ayudarme en algo.

Se agradece cualquier ayuda.

Saludos.

lucasarts_18 17-04-2008 19:12:54

Bueno, he seguido investigando y todavía no doy con nada interesante, si encuentro algo lo coloco acá.

¿Alguien ha trabajado desde php y procedimientos almacenados en oracle?

Gracias.-

Emilio 19-04-2008 09:41:19

Cita:

Empezado por lucasarts_18 (Mensaje 279769)
....es decir me devuelve un cursor de datos.

¿Cómo puedo obtener estos valores desde php para procesarlos fila a fila y poder mostrarle en forma de grilla en html?

Seguramente se me está escapando algo ya que no veo el problema. Dices que te devuelve un cursor, por tanto sólo tendrías que hacer uso del juego de funciones oci_fecth_xxx()

Concreta el problema...

Héctor Randolph 19-04-2008 18:44:36

Hola lucasarts_18

Te dejo un ejemplo de cómo manejo los cursores en oracle desde PHP

Código PHP:


        $conexion
=@OCILogon("db_username","db_password","db_name");
        
$err=OciError();
        if (
$err){
                
Mensaje('Error en la comunicación con la base de datos','<p>'.$err['message'].'</p>','','',0);    
                 exit();
        }

        
$query='BEGIN PKG_MIPAQUETE.MIPROCEDIMIENTO(:param1,:cursor_salida);END;';
        
$proc OCIParse($conexion$query);

                
//Enviamos los parámetros al procedimiento ligando las variables de php
        
$var_param1 'valor_para_el_parametro1';
        
OCIBindByName($proc':param1',&$var_param1,256);
                
//Ahora ligamos el resultado a un cursor
        
$cursor=OCINewCursor($conexion);
        
OCIBindByName($proc,':cursor_salida',&$cursor,-1,OCI_B_CURSOR);

        
OCIExecute($procOCI_DEFAULT);//Se ejecuta primero la sentencia del query
        
OCIExecute($cursorOCI_DEFAULT);//se ejecuta posteriormente el cursor para poder hacer el fetch
                //Ahora recorremos el cursor para recuperar los valores
        
while (OCIFetchInto($cursor,&$data )) {
            echo 
'campo1 del cursor: '.$data[0].'<br>';
            echo 
'campo2 del cursor: '.$data[1].'<br>';
            echo 
'campo3 del cursor: '.$data['nombre_del_campo'].'<br>';//Es una arreglo asociativo se puede usar el nombre del campo
        
}
        
OCIFreeStatement($proc);
        
OCIFreeCursor($cursor);
        
OCILogoff($conexion); 

Saludos

lucasarts_18 21-04-2008 20:47:23

Gracias Hector, estoy a la espera que me envien el esquema completo de Oracle para cargarlo en mi máquina, luego haré las pruebas correspondientes, ya estaré avisando como me fue.

Hasta Luego .-

Emilio 22-04-2008 09:20:57

Cita:

Empezado por Emilio (Mensaje 281186)
Seguramente se me está escapando algo ya que no veo el problema.

Concreta el problema...

Pues eso, gracias por la explicación y por concretar el problema :rolleyes:

lucasarts_18 22-04-2008 17:59:47

Emilio:

Disculpa por no responderte, basicamente es eso, recoger un cursor que proviene desde un package, ahora no puedo especificar mucho por que todavía no me mandan eso, apenas lo tenga en manos podré afinar mas detalles.

Con el ejemplo que me dió hector, creo que es suficiente para lo que pretendo hacer, ahora veré la forma de portarlo a ADODB, ya que esta librería utilizo en mis desarrollo.

Pero así es la informatica, me dijeron que el mismo día me mandaban el objeto, y todavía estoy a la espera....:rolleyes:

Gracias por la preocupación.

Ya estaré de nuevo por acá con este tema.

Saludos.

lucasarts_18 12-05-2008 19:10:47

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', -1OCI_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, -1OCI_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 :p

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"$param110);
   
oci_bind_by_name($sth":param2"$param210);
   
oci_bind_by_name($sth":param3"$param310);
   
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....:D

Saludos .-


La franja horaria es GMT +2. Ahora son las 01:23:20.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi