在#mysql工作台

时间:2019-03-29 08:57:19

标签: mysql

我想创建一个列,并且在过程调用中传递其名称。一个变量正在接收过程定义中的列名。如何使用该变量的值来创建该值的列?

这是为了在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 |

1 个答案:

答案 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);

demo on dbfiddle.uk