Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » Mysql »

Llamar Stored Procedure con PEAR - MDB2

Estas en el tema de Llamar Stored Procedure con PEAR - MDB2 en el foro de Mysql en Foros del Web. Buenos días. Estoy tratando de ejecutar un procedimiento almacenado de MySQL, a través de la libreria MDB2 de PEAR, pero me arroja el siguiente error: ...
  #1 (permalink)  
Antiguo 31/05/2010, 09:48
 
Fecha de Ingreso: febrero-2007
Mensajes: 28
Antigüedad: 17 años, 10 meses
Puntos: 0
Llamar Stored Procedure con PEAR - MDB2

Buenos días.

Estoy tratando de ejecutar un procedimiento almacenado de MySQL, a través de la libreria MDB2 de PEAR, pero me arroja el siguiente error:

MDB2 Error: unknown error - _doQuery: [Error message: Could not execute statement] [Last executed query: CALL proc_mayores_edad(30)] [Native code: 1312] [Native message: PROCEDURE ejemplos.proc_mayores_edad can't return a result set in the given context]

El procedimiento funciona correctamente desde la base de datos.

Esto es lo que hago:

Código PHP:
<?php
require_once 'MDB2.php';

$dsn = array ( 'phptype' => 'mysql',
 
'hostspec' => 'localhost:3306',
 
'username' => 'root',
 
'password' => '',
 
'database' => 'ejemplos');

$con =& MDB2::connect($dsn);
unset(
$dsn);

$con->loadModule('Function');
global 
$con;

function 
getMayoresEdad($edad)
{
    global 
$con;

    
$mayorEdad $con->executeStoredProc("proc_mayores_edad", array($edad));
    if(
PEAR::isError($mayorEdad))
    {
        die (
$mayorEdad->getMessage().' - '.$mayorEdad->getUserinfo());
    }
    
$personasMayores $mayorEdad->fetchAll();
    
$mayorEdad->nextResult();

    return 
$personasMayores;
}

print_r(getMayoresEdad(30));
?>
Nunca he trabajado con Stored Procedures a través de PEAR, así que no se si esta es la mejor forma de implementarlo, o si está bien. Me apoye para construir ese código con algo que encontré en un sitio.

Por tanto, les agradecería si me pudieran orientar al respecto.

Gracias, saludos cordiales.
  #2 (permalink)  
Antiguo 31/05/2010, 10:16
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 17 años
Puntos: 2658
Respuesta: Llamar Stored Procedure con PEAR - MDB2

Infiero que lo que estás tratando de hacer es recorrer el array devuelto por un stored procedure. Eso, infortunadamente, no se puede hacer porque un SP (al menos en MySQL) no devuelve tablas que puedan recorrerse, sino en todo caso puede devolver una estructura de tabla única, la cual no existe fuera del contexto del SP.
El tema es que un SP no necesariamente debe devolver algo, no es su sentido de existir, un sp puede que no retorne nada, sino ser programado para realizar una serie compleja de tareas internas a la base.
Así, el SP devolverá algo si la últma sentencia es un SELECT, pero como los objetos de un SP sólo existen mientras el SP está en ejecución, el bloque de datos devuelto deja de existir ni bien el SP termina, y no es recuperable a menos que haya sido almacenado en otra estructura.

En otras palabras:
- Como salida de un SP, una tabla no se puede recorrer, tampoco se puede actualizar ni borrar.
- Sólo se puede hacer uso de la tabla devuelta si el lenguaje de programación permite guardar la tabla resultado dentro de una estructura propia (caso VB.net, C# y otros), no pudiendo usarse para actualizar o borrar registros de la base.

¿Se comprende la idea?
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #3 (permalink)  
Antiguo 31/05/2010, 13:03
 
Fecha de Ingreso: febrero-2007
Mensajes: 28
Antigüedad: 17 años, 10 meses
Puntos: 0
Respuesta: Llamar Stored Procedure con PEAR - MDB2

Muchas gracias gnzsoloyo, entiendo claramente.

Entonces buscare otra forma de acceder a esos datos.

Saludos

Etiquetas: llamar, mdb, pear, procedure, stored
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 22:59.