Я пытаюсь создать что-то в столбцах одной из моих таблиц. Я создал процесс MySQL, который идет со странным выводом. Процесс:
create procedure test (
in in_database varchar(255),
in in_table varchar(255))
begin
declare done int default false;
declare stmt text default '';
declare var_column_name varchar(64);
declare var_data_type varchar(64);
declare
cur_cols cursor
for
select
column_name,data_type
from
information_schema.columns
where
table_schema = in_database collate utf8_general_ci
and
table_name = in_table collate utf8_general_ci
order by
ordinal_position asc;
set done = false;
open cur_cols;
colsloop: loop
fetch cur_cols
into
var_column_name,
var_data_type;
if done then
leave colsloop;
end if;
set stmt = concat(ifnull(stmt,''),':',ifnull(var_column_name,''));
end loop;
close cur_cols;
select stmt;
end$$
Довольно просто: добавление имен столбцов в переменную и по окончании вывод результата на консоль. Когда я запускаю тестирование, моя процедура выглядит следующим образом:
call test('mysql','columns_priv');
Я получаю
Error Code: 1329 (02000): No data - zero rows fetched, selected, or processed
Когда я перемещаю последний оператор выбора в цикл, я вижу, что переменная stmt накапливается, но все еще заканчивается в сообщении об ошибке 1329.
Я пробовал COALESCE вместо IFNULL, явно устанавливая переменную stmt в '', но я продолжаю получать этот странный вывод, также включенный. Я думал, что создаю этот небольшой утилиты за полчаса, но это уже стоило мне полдня, и я не знаю, что происходит не так.
К сожалению, база данных, в которой размещен процесс, имеет другое сопоставление, следовательно, COLLATE. Кроме этого, я не понимаю, почему этот код не запускается.
Любые указатели приветствуются.