- Los DECLARE deben estar al principio, cuando se usan sentencias preparadas.
- Los SP, para cargarlos programáticamente (desde un lenguaje de programación) sólo deben contener el cuerpo del código:
Código PHP:
// $db es el result de la conexión.
// $query es una variable string
// $res es el result de ejecución
// \n permite agregar un salto de linea en la cadena almacenada.
$query = "DROP PROCEDURE IF EXISTS `getpersonas`";
$res = mysql_query($query, $db);
$query = "CREATE PROCEDURE `getPersonas`( IN cadenaWhere VARCHAR(1000))\n";
$query. = "BEGIN\n";
$query. = " DECLARE stmt VARCHAR(1000);\n";
$query. = " SET @ss=CONCAT('select * FROM personas ', cadenaWhere);\n";
$query. = " PREPARE stmt FROM @ss;\n";
$query. = " EXECUTE stmt;\n";
$query. = " DEALLOCATE PREPARE stmt;\n";
$query. = "END";
$res = mysql_query($query, $db);
- Recordar que cuando un SP se carga, sigue existiendo todo el tiempo hasta borrarlo, por lo que no es necesario volverlo a cargar si no ha sido modificado.