我想创建一个列,并且在过程调用中传递其名称。一个变量正在接收过程定义中的列名。如何使用该变量的值来创建该值的列?
这是为了在mysql工作台中使用列使用过程。
用mysql工作台编写的代码:-
CREATE DEFINER=`root`@`localhost` PROCEDURE `alter_table`(in user_id varchar(5))
begin
IF NOT EXISTS(
SELECT * FROM information_schema.COLUMNS
WHERE COLUMN_NAME=user_id AND TABLE_NAME='friend_list' AND TABLE_SCHEMA='social_website'
)
THEN
ALTER TABLE `social_website`.`friend_list`
ADD COLUMN user_id int;
end if;
end
如果我使用调用过程 调用alter_table(1); 预期输出: | 1 | 我得到的输出: | user_id |
答案 0 :(得分:0)
您可以在存储过程上使用prepared SQL statement来使用以下解决方案:
CREATE DEFINER = `root`@`localhost` PROCEDURE `alter_table` (IN user_id VARCHAR(5))
BEGIN
IF NOT EXISTS(
SELECT *
FROM INFORMATION_SCHEMA.COLUMNS
WHERE COLUMN_NAME = user_id AND TABLE_NAME = 'friend_list' AND TABLE_SCHEMA = 'social_website'
) THEN
-- get the ALTER TABLE statement.
SET @alter_table = CONCAT("ALTER TABLE `social_website`.`friend_list` ADD COLUMN `", user_id, "` INT");
-- PREPARE and EXECUTE the ALTER TABLE statement.
PREPARE stmt FROM @alter_table;
EXECUTE stmt;
-- DEALLOCATE the statement.
DEALLOCATE PREPARE stmt;
END IF;
END
因此,以下命令将创建一个名为1
的新列:
CALL alter_table(1);