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 ;