Problemas con Store procedures en los scripts de un modulo

Problemas con Store procedures en los scripts de un modulo

de Jairo Henao -
Número de respuestas: 1

Hola a todos, buen día:

En este momento estoy creando un nuevo módulo de actividades y tengo problemas con el script de la base de datos que va en la carpeta <db>. Estoy trabajando con MySQL y necesito crear un procedimiento almacenado, el código que crea el procedimiento está bien, pero tengo entendido que cuando Moodle procesa ese script, toma como separador de líneas el punto y coma<;>. El problema viene en el momento de procesar el código del procedimiento almacenado pues tiene varias instrucciones que tienen el punto y coma, moodle los segmenta como si fueran instrucciones independientes, sabiendo que no lo son, son parte del código.

Este es el código del SP:

DROP PROCEDURE IF EXISTS `getIdCategoria`;

CREATE DEFINER=`root`@`localhost` PROCEDURE `getIdCategoria`(IN nombreCategoria varchar(50),OUT identificador int(10))
BEGIN

  DECLARE i int(2);

  SELECT id INTO i
  FROM `prefix_user_info_category`
  WHERE name = nombreCategoria;

  SET identificador=i;

END;

Los punto y coma internos del procedimiento son los que me causan este error.

No se que solución se le pueda dar a esto...

Promedio de valoraciones: -
En respuesta a Jairo Henao

Re: Problemas con Store procedures en los scripts de un modulo

de Iñaki Arenaza -
Imagen de Desarrolladores Imagen de Desarrolladores de plugins Imagen de Documentadores Imagen de Moderadores Imagen de Moodlers de gran ayuda

Sospecho que estás usando un fichero .../modulo/db/mysql.php para lanzar la creación de ese procedimiento almacenado. Si es así, un par de detalles: a) ese método está desaconsejado desde la versión 1.7 (ahora se usa el fichero install.xml, que usa la infraestructura de XMLDB) y b) como ves tiene algunas limitaciones por la forma en que se ha diseñado para ser usado.

Si quieres ejecutar cosas que ni el método viejo (mysql.php) ni el nuevo (install.xml) te dejan, siempre puedes añadir una funcion llamada nombremodulo_install que se ejecutará como parte de la instalación del módulo, una vez procesados los ficheros mysql.php o install.xml.

Además, si existe un fichero llamado .../modulo/defaults.php, también se ejecuta al final del proceso de instalación del módulo, para poder hacer lo que te interese (incluyendo añadir valores por defecto en $CFG si defines una variable de tipo array asociativo llamada $defaults).

Como ves tienes unas cuantas opciones guiño

Saludos. Iñaki.