Procedimientos Almacenados - Stored Procedures / out param

205 views
Skip to first unread message

fierasuburbana

unread,
Mar 31, 2010, 10:37:01 AM3/31/10
to KumbiaPHP Framework
Hola,

Mi consulta es acerca de cómo utilizar procedimientos almacenados
dentro de KumbiaPHP.

Tuve éxito al dispararlos con el método ->sql de ActiveRecord, pero
ahora necesito utilizar un procedimiento almacenado que contiene
parámetros OUT.

Estoy utilizando Spirit 1.0 Beta1 y MySQL.

Este es el código de sp.

DELIMITER $$

DROP PROCEDURE IF EXISTS `cartas`.`sp_cartaremito`$$
CREATE DEFINER=`root`@`localhost` PROCEDURE `sp_cartaremito`(
in cdid int,
OUT nombre varchar(255),
OUT domicilio varchar(255),
OUT localidad varchar(255),
OUT provincia varchar(50),
OUT texto longtext,
OUT expe varchar(30),
OUT area varchar(255))
begin

select c.dst_nombre, c.dst_domicilio,
c.dst_localidad,
p.nombre,
a.descripcion
into nombre,domicilio,localidad,provincia,area

from cd c
inner join provincias p on c.dst_provincia_id=p.id
inner join areas a on rmt_area_id=a.id
where c.id=cdid;

end$$

DELIMITER ;


Saludos!!!

fierasuburbana

unread,
Mar 31, 2010, 12:34:52 PM3/31/10
to KumbiaPHP Framework
Bueno...

luego de casi volverme loco, encontré una solución que me sirvió.

Para utilizar el stored procedure sp_cartaremito que contiene
parámetros de tipo OUT, tengo la siguiente función en el Modelo que
corresponde:

function BuscarReporte($id){

$this->sql("call sp_cartaremito($id,
@nombre,
@domicilio,
@localidad,
@provincia,
@expediente,
@area)");

$resultado=$this->sql("SELECT
@nombre as Nombre,
@domicilio as Domicilio,
@localidad as Localidad,
@provincia as Provincia,
@expediente as Expediente,
@area as Area;");

return mysql_fetch_object($resultado);

} //fin de la función BuscarReporte($id)

Para recuperar la información, simplemente ejecuto la función del
modelo, y obtengo un objeto que es muy fácil manipular.

Saludos!!!!

Deivinson Tejeda

unread,
Mar 31, 2010, 12:37:02 PM3/31/10
to kum...@googlegroups.com
http://wiki.kumbiaphp.com/Store_Procedure_(Procedimientos_Almacenados)_KumbiaPHP

2010/3/31 fierasuburbana <eard...@gmail.com>
--
Viva KumbiaPHP Framework!
 http://www.kumbiaphp.com/
 Ha recibido este mensaje porque está suscrito a Grupo "KumbiaPHP Framework" de Grupos de Google.
 Para obtener más opciones, visita este grupo en http://groups.google.com/group/kumbia?hl=es.

To unsubscribe, reply using "remove me" as the subject.



--
Deivinson Tejeda (CaChi)
KumbiaPHP Framework Developer
http://www.kumbiaphp.com

Twitter @DeivinsonTejeda

alraf

unread,
Aug 19, 2014, 7:04:08 AM8/19/14
to kum...@googlegroups.com
Buenas retomo este tema para ver si puedo darle solución a la utilización de Procedimientos almacenados a través de ActiveRecord que no consigo, he probado de 2 maneras, la que hay en la wiki que hace referencia Deivinson Tejeda y la del compañero que cito pero no lo consigo.

Tengo un método en el modelo muy sencillo para realizar una prueba que contiene:
public function search() {
        $rsearch = $this->sql("CALL proc_buscador_tickets()");
        return mysql_fetch_object($rsearch);
}

La ejecución de éste método me muestra el siguiente error:

KumbiaException: Commands out of sync; you can't run this command now al ejecutar <em>"DESCRIBE `menus`"</em> (0)

El procedimiento almacenado simplemente contiene una consulta sencilla, para comprobar funcionamiento exclusivamente:
SELECT * FROM ticket


¿Alguien tiene alguna idea de porque puede dar el ActiveRecord un error en un describe al que no llamo desde esa consulta de forma implícita?

Saludos

Alejandro Quiroz

unread,
Aug 19, 2014, 8:40:16 AM8/19/14
to kum...@googlegroups.com

Buenos días!

Al parecer el framework está tratando de mapear a través de un modelo menus.php una tabla menus, y probablemente al no existir arroja el error, a pesar que no tenga nada que ver con el procedimiento  (autocarga de modelos).

Revisa dicho modelo, tabla, usuario de la base, permisos sobre dicha tabla.

--
Viva KumbiaPHP Framework!
http://www.kumbiaphp.com/
Ha recibido este mensaje porque está suscrito a Grupo "KumbiaPHP Framework" de Grupos de Google.
Para obtener más opciones, visita este grupo en http://groups.google.com/group/kumbia?hl=es.
---
Has recibido este mensaje porque estás suscrito al grupo "KumbiaPHP Framework" de Grupos de Google.
Para anular la suscripción a este grupo y dejar de recibir sus mensajes, envía un correo electrónico a kumbia+un...@googlegroups.com.
Para acceder a más opciones, visita https://groups.google.com/d/optout.

alraf

unread,
Aug 19, 2014, 8:54:14 AM8/19/14
to kum...@googlegroups.com
Buenas, lo primero gracias por responder. El modelo menus.php no lo cargo yo manualmente, ni siquiera lo tengo cargado en el controlador, este lo carga automáticamente el backend que estoy usando y funciona perfectamente en todos sitios (la tabla menus también existe, el problema viene cuando cargo el método de llamada al procedimiento almacenado), el usuario de la bd no debería ser puesto que uso el root en el entorno de desarrollo y por tanto el tema de permisos creo que también quedaría descartado.

No se que mas puedo hacer o comprobar pues si comento las líneas de ejecución del procedimiento todo vuelve a funcionar con normalidad como es de esperar.
//$rsearch = $this->sql("CALL proc_buscador_tickets()");
//return mysql_fetch_object($rsearch);

Saludos y gracias por la ayuda!!

Andres Lacquaniti

unread,
Aug 19, 2014, 10:03:44 AM8/19/14
to kum...@googlegroups.com
Alberto:

Te paso un lib que arme para lo que estas queriendo hacer .. permite llamar un SP que tiene un select dentro y obtener el resultado dentro de un objeto.

Load::lib('hal_db');
$datos = new HalDb()
$resultado = $datos->callSelect('SP_que_devuelver_un_select()');
var_dump($resultado);


Trabaja por afuera del activerecod pero tomo la configuración del config.ini, solo lo probé en mysql.

Espero que te sirva !! saludo !



--
--

Atte. Andres.
--------------------------------------------------------
* La información no es conocimiento. La única fuente de conocimiento es la experiencia 
* Todo aquel que nunca cometió un error, jamás ha intentado nada nuevo
--------------------------------------------------------
hal_db.php

alraf

unread,
Aug 21, 2014, 2:22:31 AM8/21/14
to kum...@googlegroups.com, h...@caseroft.com.ar
Muchas gracias, funciona a la perfección la Lib.

Saludos
Reply all
Reply to author
Forward
0 new messages