Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Otros entornos y lenguajes > PHP
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 14-04-2008
Avatar de lucasarts_18
lucasarts_18 lucasarts_18 is offline
Miembro
 
Registrado: mar 2005
Ubicación: Villa Alemana,Chile
Posts: 1.087
Poder: 21
lucasarts_18 Va por buen camino
Question 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.

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.

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.
__________________
No todo es como parece ser...
Responder Con Cita
  #2  
Antiguo 17-04-2008
Avatar de lucasarts_18
lucasarts_18 lucasarts_18 is offline
Miembro
 
Registrado: mar 2005
Ubicación: Villa Alemana,Chile
Posts: 1.087
Poder: 21
lucasarts_18 Va por buen camino
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.-
__________________
No todo es como parece ser...
Responder Con Cita
  #3  
Antiguo 19-04-2008
Avatar de Emilio
*Emilio* Emilio is offline
Capo
 
Registrado: may 2003
Ubicación: Palma de Mallorca
Posts: 2.635
Poder: 10
Emilio Va por buen camino
Cita:
Empezado por lucasarts_18 Ver Mensaje
....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...
__________________
Saludos
Emilio
Responder Con Cita
  #4  
Antiguo 19-04-2008
Avatar de Héctor Randolph
[Héctor Randolph] Héctor Randolph is offline
Miembro Premium
 
Registrado: dic 2004
Posts: 882
Poder: 20
Héctor Randolph Va por buen camino
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

Última edición por Héctor Randolph fecha: 19-04-2008 a las 18:50:05.
Responder Con Cita
  #5  
Antiguo 21-04-2008
Avatar de lucasarts_18
lucasarts_18 lucasarts_18 is offline
Miembro
 
Registrado: mar 2005
Ubicación: Villa Alemana,Chile
Posts: 1.087
Poder: 21
lucasarts_18 Va por buen camino
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 .-
__________________
No todo es como parece ser...
Responder Con Cita
  #6  
Antiguo 22-04-2008
Avatar de Emilio
*Emilio* Emilio is offline
Capo
 
Registrado: may 2003
Ubicación: Palma de Mallorca
Posts: 2.635
Poder: 10
Emilio Va por buen camino
Cita:
Empezado por Emilio Ver Mensaje
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
__________________
Saludos
Emilio
Responder Con Cita
  #7  
Antiguo 22-04-2008
Avatar de lucasarts_18
lucasarts_18 lucasarts_18 is offline
Miembro
 
Registrado: mar 2005
Ubicación: Villa Alemana,Chile
Posts: 1.087
Poder: 21
lucasarts_18 Va por buen camino
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....

Gracias por la preocupación.

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

Saludos.
__________________
No todo es como parece ser...
Responder Con Cita
  #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
Poder: 21
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', -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

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....

Saludos .-
__________________
No todo es como parece ser...
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Rescatar valor desde Procedimiento Almacenado en Delphi 7 Confucio SQL 3 11-03-2009 01:32:53
Asignar valores a Arrays dinámicos - (migrar datos desde CLIPPER) jplj Varios 14 15-10-2007 11:49:48
ejecutar un query accesando tablas de Oracle desde SQL Server SQL Server MS SQL Server 1 02-03-2007 23:44:18
Como rescatar la version de un programa Micchel Varios 4 30-11-2005 05:40:52
¿Cómo cambiar los valores de VersionInfo desde código? DarKraZY Varios 2 13-01-2004 15:41:29


La franja horaria es GMT +2. Ahora son las 03:43:39.


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
Copyright 1996-2007 Club Delphi