7

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 - View's SELECT contains a variable or parameter

4

1 回答 1

11

如您所见 - 视图不能使用变量,这是一个限制。您正在尝试创建具有确切 WHERE 条件的视图;首先构造 CREATE VIEW 语句文本,然后使用准备好的语句执行语句,它会帮助你。但是,您真的需要它来创建、创建和创建新视图吗?

编辑:这是评论中参考的内容。

Olexandr Melnyk对于 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();
于 2012-07-02T13:23:30.533 回答