gpt4 book ai didi

MySQL存储过程?

转载 作者:行者123 更新时间:2023-11-29 14:40:34 25 4
gpt4 key购买 nike

我使用的是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输出blob

当我单独运行 getfields 时,它返回表的字段数据,但是当我从主程序中调用它时,它返回 1406 错误数据对于第 16 行的 coltype 来说太长了!!!我看到列表中的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;

最佳答案

更简单的方法,只需运行它 -

SET @db = 'test'; -- Specify your schema

SELECT CONCAT(t.table_schema, '.', t.table_name, '*', GROUP_CONCAT(c.column_name)) 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
WHERE t.TABLE_SCHEMA = @db
GROUP BY t.table_name;
<小时/>

编辑

SELECT GROUP_CONCAT(table_info SEPARATOR '\r\n') table_info FROM (
SELECT CONCAT(t.table_schema, '.', t.table_name, '*', GROUP_CONCAT(c.column_name)) 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
WHERE t.TABLE_SCHEMA = @db
GROUP BY t.table_name
) t;

关于MySQL存储过程?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8076797/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com