SELECT MAX (...) неправильно возвращает NULL в хранимой процедуре - PullRequest
3 голосов
/ 23 сентября 2019

У меня есть таблица, ga_sum_1, с колонкой, created_timestamp в ней.Когда я выполняю следующий запрос из командной строки mysql:

mysql> select max(created_timestamp) from ga_sum_1;
+------------------------+
| max(created_timestamp) |
+------------------------+
| 2017-11-05 00:59:55    |
+------------------------+
1 row in set (0.00 sec)

И если я делаю то же самое из очень простой хранимой процедуры:

delimiter //
create procedure test()
begin
  select max(created_timestamp) from ga_sum_1;
end//
delimiter ;

mysql> call test();
+------------------------+
| max(created_timestamp) |
+------------------------+
| 2017-11-05 00:59:55    |
+------------------------+
1 row in set (0.00 sec)

Но, когда я так жеиз хранимой процедуры:

drop procedure if exists test;

delimiter //

create procedure test()
begin
  declare cursor_end condition for sqlstate '02000';
  declare finished int default 0;
  declare game_id int(11);
  declare user_id int(11);
  declare game_instance_id bigint(20);
  declare currency varchar(15);
  declare created_timestamp timestamp;
  declare wager decimal(18,2);
  declare win decimal(18,2);
  -- cursor
  declare game_action_csr cursor for select * from game_action_view;
  declare continue handler for cursor_end set finished=1;

  -- create view dynamically
select max(created_timestamp) from ga_sum_1;

end//

delimiter ;

mysql> call test();
+------------------------+
| max(created_timestamp) |
+------------------------+
| NULL                   |
+------------------------+
1 row in set (0.00 sec)

Query OK, 0 rows affected (0.00 sec)

Что я делаю не так в последнем примере?

==== EDIT ====

Некоторые дальнейшие исследования показываютчто это declare created_timestamp - очевидно, что смущает выбор в столбце с тем же именем!

Ответы [ 2 ]

4 голосов
/ 23 сентября 2019

Это, вероятно, из-за этой строки:

  declare created_timestamp timestamp;
3 голосов
/ 23 сентября 2019

В качестве альтернативы другому ответу, вы могли бы просто более конкретизировать:

select max(ga_sum_1.created_timestamp) from ga_sum_1
...