information_schema 程序内部未知
information_schema unknown inside a procedure
我成功地 运行 查询选择了 information_schema 中的 table 的列名,但是如果我 运行 在存储过程中使用相同的查询它带有光标,那么 information_schema 是未知的。谁能告诉我原因并帮助我解决问题?谢谢
这是查询
SELECT column_name
FROM information_schema.columns
WHERE table_schema = 'database_name'
AND table_name='Table_name';
这是程序。
DELIMITER $$
CREATE PROCEDURE build_column_names_str (INOUT column_list varchar(4000))
BEGIN
DECLARE v_finished INTEGER DEFAULT 0;
DECLARE v_column varchar(100) DEFAULT "";
-- declare cursor for column names
DEClARE column_cursor CURSOR FOR
SELECT column_name
FROM information_schema.columns
WHERE table_schema = 'database_name'
AND table_name='Table_name';
-- declare NOT FOUND handler
DECLARE CONTINUE HANDLER
FOR NOT FOUND SET v_finished = 1;
OPEN column_cursor;
get_column: LOOP
FETCH column_cursor INTO v_column;
IF v_finished = 1 THEN
LEAVE get_column;
END IF;
-- build column name list
SET column_list = CONCAT(v_column,",",column_list);
END LOOP get_column;
CLOSE column_cursor;
END$$
DELIMITER ;
SET @column_list = "";
CALL build_column_names_str(@column_list);
SELECT @column_list;
谢谢
您的代码是正确的。
检查程序执行权限
或用
替换程序
SELECT group_concat(column_name)
FROM information_schema.columns
WHERE table_schema = 'database_name'
AND table_name='Table_name';
我对 information_schema.tables
也有类似的问题:当我在存储过程中调用 information_schema.tables
时,它 returns 所有字段都为 NULL,而且更奇怪的是,每隔一个 SELECTs 在另一个表的存储过程中也 returns 每个字段都是 NULL。
我通过从 information_schema.tables
添加 WHERE TABLE_SCHEMA = DATABASE()
到 SELECT 来解决这个问题
我成功地 运行 查询选择了 information_schema 中的 table 的列名,但是如果我 运行 在存储过程中使用相同的查询它带有光标,那么 information_schema 是未知的。谁能告诉我原因并帮助我解决问题?谢谢 这是查询
SELECT column_name
FROM information_schema.columns
WHERE table_schema = 'database_name'
AND table_name='Table_name';
这是程序。
DELIMITER $$
CREATE PROCEDURE build_column_names_str (INOUT column_list varchar(4000))
BEGIN
DECLARE v_finished INTEGER DEFAULT 0;
DECLARE v_column varchar(100) DEFAULT "";
-- declare cursor for column names
DEClARE column_cursor CURSOR FOR
SELECT column_name
FROM information_schema.columns
WHERE table_schema = 'database_name'
AND table_name='Table_name';
-- declare NOT FOUND handler
DECLARE CONTINUE HANDLER
FOR NOT FOUND SET v_finished = 1;
OPEN column_cursor;
get_column: LOOP
FETCH column_cursor INTO v_column;
IF v_finished = 1 THEN
LEAVE get_column;
END IF;
-- build column name list
SET column_list = CONCAT(v_column,",",column_list);
END LOOP get_column;
CLOSE column_cursor;
END$$
DELIMITER ;
SET @column_list = "";
CALL build_column_names_str(@column_list);
SELECT @column_list;
谢谢
您的代码是正确的。
检查程序执行权限
或用
SELECT group_concat(column_name)
FROM information_schema.columns
WHERE table_schema = 'database_name'
AND table_name='Table_name';
我对 information_schema.tables
也有类似的问题:当我在存储过程中调用 information_schema.tables
时,它 returns 所有字段都为 NULL,而且更奇怪的是,每隔一个 SELECTs 在另一个表的存储过程中也 returns 每个字段都是 NULL。
我通过从 information_schema.tables
WHERE TABLE_SCHEMA = DATABASE()
到 SELECT 来解决这个问题