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 来解决这个问题