LoginSignup
7
7

More than 5 years have passed since last update.

MySQLのビューでローカル変数を呼び出す

Posted at

マニュアルにはできないと書かれているが実際にはできて概ね問題のない動作をしているように見えるのでメモ.もしかすると,本当は何かの制約を満たせないからローカル変数への参照を制限しているのにもかかわらず,抜け道を見つけてしまっただけなのかもしれないので自己責任で.

問題点

MySQLではビューに直接ローカル変数を書き込むことができない.例えば以下の例の場合,

CREATE VIEW get_variable_test_view AS SELECT @variable

#1351 - View's SELECT contains a variable or parameter というエラーが発生してビューを作ることはできない

解決法

しかし,ローカル変数を返すストアドファンクションを経由するとローカル変数を参照することができる.

CREATE FUNCTION GetVariable() RETURNS INT DETERMINISTIC RETURN @variable;
CREATE VIEW get_variable_test_view AS SELECT GetVariable();

のようにしてストアドファンクションとビューを作った後,

SET @variable = 1000;
SELECT * FROM get_variable_test_view;

のように参照する.この例だとちゃんと1000が返ってくる(MySQL 5.1).

応用

CREATE FUNCTION GetVariable2() RETURNS INT NO SQL RETURN @variable2 := @variable2 + 1;
CREATE VIEW get_variable2_test_view AS SELECT GetVariable2(), GetVariable2();
SET @variable2 = 1000;
SELECT * FROM get_variable2_test_view;

ローカル変数を書き換えることも可能で,この例だと1001,1002が返ってくる.

7
7
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
7
7