variable stored statement prepared into funcion ejemplos mysql stored-procedures prepare

stored - Declaración PREPARE de MySQL en procedimientos almacenados



prepared sql statement mysql (2)

Puede usar sentencias Concatenar, PREPARAR y EJECUTAR como se muestra a continuación.

CREATE DEFINER=`products`@`localhost` PROCEDURE `generateMeritList`( IN `mastercategory_id` INT(11), IN `masterschools_id` INT(11) ) NO SQL begin declare total int default 0; declare conditions varchar(255) default ''''; declare finalQuery varchar(60000) default ''''; if mastercategory_id > 0 THEN SET conditions = CONCAT('' and app.masterschools_id = '', mastercategory_id); end if; SET @finalQuery = CONCAT( "SELECT * FROM applications app INNER JOIN masterschools school ON school.id = app.masterschools_id WHERE (app.status = ''active''", conditions, " LIMIT ",total); PREPARE stmt FROM @finalQuery; EXECUTE stmt; DEALLOCATE PREPARE stmt; end

Tengo este archivo sql:

USE mydb; DROP PROCEDURE IF EXISTS execSql; DELIMITER // CREATE PROCEDURE execSql ( IN sqlq VARCHAR(5000) ) COMMENT ''Executes the statement'' BEGIN PREPARE stmt FROM sqlq; EXECUTE stmt; DEALLOCATE PREPARE stmt; END // DELIMITER ;

Cuando trato de ejecutarlo con

# cat archivo.sql | mysql -p

yo obtengo

ERROR 1064 (42000) at line 6: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ''sqlq; EXECUTE stmt; DEALLOCATE PREPARE stmt; END'' at line 5

¿Qué estoy haciendo mal?


solo puede preparar y ejecutar sql que es un literal de cadena o una variable de usuario que contiene el texto de la instrucción. tratar

USE mydb; DROP PROCEDURE IF EXISTS execSql; DELIMITER // CREATE PROCEDURE execSql ( IN sqlq VARCHAR(5000) ) COMMENT ''Executes the statement'' BEGIN SET @sqlv=sqlq; PREPARE stmt FROM @sqlv; EXECUTE stmt; DEALLOCATE PREPARE stmt; END // DELIMITER ;