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-ビューのSELECTに変数またはパラメータが含まれています

4

1 に答える 1

11

ご覧のとおり、ビューは変数を使用できません。これは制限事項です。正確なWHERE条件でビューを作成しようとしています。最初にCREATEVIEWステートメントテキストを作成し、次にプリペアドステートメントを使用してステートメントを実行します。これは役に立ちます。しかし、新しいビューを作成、作成、作成するために、本当にそれが必要ですか?

編集:これはコメントの参照の内容です。

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 に答える