我构建了一个存储过程,以JSON格式返回给定表和数据库的列列表。然而,它也返回其他表的列,尽管有WHERE子句-这没有意义,我不确定我做错了什么。非常感谢您的帮助。
USE `db-xyz`;
DROP PROCEDURE IF EXISTS GetColumnsInfo;
DELIMITER $$
CREATE
DEFINER = 'admin'@'localhost'
PROCEDURE GetColumnsInfo (IN table_name varchar(128),OUT columns_info json)
BEGIN
SELECT
JSON_OBJECTAGG(
COLUMN_NAME,
JSON_OBJECT(
"column_name", COLUMN_NAME,
"data_type", DATA_TYPE
)
) AS columns_info
INTO @columns_info
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_SCHEMA = DATABASE()
AND TABLE_NAME = table_name;
SET columns_info = @columns_info;
END
$$
DELIMITER ;
我是这样测试的:
USE `db-xyz`;
SET @table_name = 'Client';
SET @columns_info = '';
CALL GetColumnsInfo(@table_name, @columns_info);
-- Display the output
SELECT @columns_info AS columns_info;
1条答案
按热度按时间qacovj5a1#
您应该将过程参数命名为不同于列名的名称。Column names are case-insensitive。
现在,您的过程有一个带有以下条件的查询:
这两个操作数都引用了表的列,而不是过程参数。MySQL不能告诉你后面的操作数是过程参数。
因此,它的计算结果为
true
,因为将列与其自身进行比较必然为true(除非该列为NULL)。