【发布时间】:2011-11-10 08:39:23
【问题描述】:
我正在使用 mysql 5.0。我有一个存储过程,它以字符串形式获取数据库的所有元数据并返回它。在其中我调用另一个存储过程来获取表的元数据。我正在使用以下内容在字符串中获取模式列表及其表
DECLARE tb_cur CURSOR FOR SELECT table_name, table_schema FROM INFORMATION_SCHEMA.TABLES;
为此,我通过调用另一个存储过程来附加字段元数据:
call Getfields(tbNm, dbNm, 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 错误数据,对于第 16 行的 coltype 而言太长了!!! 我看到columns表中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;
【问题讨论】: