PhpMyAdmin不接受该过程内的参数“ id_jugador_IN”。
这是我们正在执行的过程:
SET GLOBAL event_scheduler = 1; use traviandatabase; DELIMITER $$ DROP PROCEDURE IF EXISTS sp_monitoritzacio_jugador $$ CREATE PROCEDURE sp_monitoritzacio_jugador(IN id_jugador_IN INT(10)) BEGIN CREATE OR REPLACE VIEW dades_ususari AS SELECT j.nom AS jugador, j.sexe AS sexe, j.edat AS edat, j.correu AS correu, a.nom AS alianca, p.nom AS pais, c.nom_ciutat AS ciutat FROM jugador AS j JOIN alianca AS a JOIN pais AS p JOIN ciutat AS c ON j.id_jugador = id_jugador_IN GROUP BY id_jugador_IN; END $$ DELIMITER ; CALL sp_monitoritzacio_jugador(1);
这是表“ jugador”:
DROP TABLE IF EXISTS `jugador`; CREATE TABLE `jugador` ( `id_jugador` int(10) NOT NULL AUTO_INCREMENT, `id_raca` int(10) NOT NULL, `id_pais` int(10) NOT NULL, `id_alianca` int(10) DEFAULT '0', `nom` varchar(20) NOT NULL, `sexe` enum('Home','Dona') NOT NULL, `edat` int(10) NOT NULL, `correu` varchar(20) NOT NULL, PRIMARY KEY (`id_jugador`), KEY `jugador-alianca` (`id_alianca`), KEY `id_pais` (`id_pais`), KEY `id_raca` (`id_raca`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
因此,它不会停止显示相同的错误:
MySQL说:1351-视图的SELECT包含一个变量或参数
如您所见-视图不能使用变量,这是一个限制。您正在尝试创建一个具有确切WHERE条件的视图;首先构造CREATE VIEW语句文本,然后使用准备好的语句执行该语句,它将为您提供帮助。但是,您真的需要它来创建,创建和创建新视图吗?
编辑:这是注释中参考的内容。
奥列克山大·梅尔尼克对MySQL的意见中对局部变量使用限制一个简单的解决方法是使用一个函数,返回变量的值:
create function book_subject returns varchar(64) as return @book_subject; create view thematical_books as select title , author from books where subject = book_subject();