Переменная хранимой процедуры не возвращает ожидаемое значение в MySQL? - PullRequest
1 голос
/ 14 августа 2011

Я отлаживаю этот код

create procedure create_view ( IN t varchar(50)) 
BEGIN
  prepare stmt from 'select @cnt= count( weight ) from test where url = ?;';
  execute stmt using @t;
  set @base = @cnt /4;
  set @offset = @cnt / 2;
  set @query = concat('create or replace view view_by_url as select url, weight from test where url = ',@t,' order by weight limit  ',@base,' , ',@offset,' ;');
  select t as 'param';
  select cnt as 'count';
  select @base as 'base';
  select @offset as 'offset';
  select @query as 'query';
 -- prepare stmt from @query;
 -- execute stmt ;
END;
call create_view('a');

И @t возвращает 'a' в наборе результатов, а @cnt, @base и @offset нет.И я не могу объяснить, почему.Можете ли вы помочь мне?

Ответы [ 2 ]

1 голос
/ 14 августа 2011

Попробуйте один SELECT в конце хранимой процедуры:

  SELECT 
       t as 'param', 
       @cnt as 'count', 
       @base as 'base', 
       @offset as 'offset', 
       @query as 'query';
0 голосов
/ 15 августа 2011

Проблема, кажется, в SELECT. Оператор '=' - это сравнение или что-то подобное, в то время как для достижения желаемого поведения в этом случае следует использовать ': ='.

prepare stmt from 'select @cnt= count( weight ) from test where url = ?;';

Это изменение заставляет весь код работать нормально.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...