Я использую MySQL 5.0.У меня есть хранимая процедура, которая получает все метаданные базы данных в строке и возвращает ее.В нем я вызываю другую хранимую процедуру, чтобы получить метаданные таблиц.Я использую следующее, чтобы получить список схем и их таблиц в строке
DECLARE tb_cur CURSOR FOR SELECT table_name, table_schema FROM INFORMATION_SCHEMA.TABLES;
К этому я прикрепляю метаданные полей, вызывая другую хранимую процедуру:
call Getfields(tbNm, dbNm, fields);
fieldsбыл объявлен как:
Declare fields blob default "";
Затем я объединяю все, чтобы получить одну строку:
set output = concat(output, dbNm, ".", tbNm, "*", fields);
dbNm и tbNm объявляются как
varchar(50)
Выходные данныев моем getFields хранится процедура типа out fields blob
Вывод из моей основной процедуры OUT output blob
Когда я запускаю getfields отдельно, он возвращает данные поля для таблицы, но когдая вызываю его из моей основной процедуры, он возвращает данные об ошибке 1406, слишком длинные для coltype в строке 16 !!!Я видел, что тип поля column_type в таблице столбцов - это длинный текст, поэтому я создал переменную конкатенации типа blob.
Любые намеки / предложения ??Я застрял с этим в течение нескольких дней !!
- запрос
SELECT GROUP_CONCAT(table_info SEPARATOR '~') table_info FROM (
SELECT CONCAT(t.table_schema, '.', t.table_name, '*',
GROUP_CONCAT(CONCAT(c.column_name, '+', c.COLUMN_TYPE) SEPARATOR ','))
table_info
FROM information_schema.TABLES t
JOIN information_schema.COLUMNS c
ON t.table_schema = c.table_schema AND t.table_name = c.table_name
GROUP BY t.table_name
) t;