如何访问MySQL Procedure参数?

时间:2015-10-16 19:44:27

标签: mysql stored-procedures

我正在尝试创建一个在给定表中创建列的过程(如果它不存在)。新列的名称应该从我称之为“colname”的参数中获取。

然而,这不起作用,它会创建列,但实际名称为“colname”,而不是我称之为的值。我在这里做错了什么?

delimiter ;;
create procedure autoColumns (colname varchar(64))
begin
    declare continue handler for 1060 begin end;
    alter table affiliates add colname DECIMAL(5,2);
end;;
call autoColumns('testColumn');;

2 个答案:

答案 0 :(得分:1)

在mysql变量中不能用于动态确定表名或列名,只能用于值。要实现您想要的功能,您需要将sql组装为字符串并使用prepared statement以语音方式执行它。请参阅链接文档中的第3个示例。

答案 1 :(得分:1)

你非常接近,OP。

create table affiliates (id int);

delimiter //
create procedure autoColumns(colname varchar(64))
begin
    set @dml = concat('alter table affiliates add column ', colname, ' decimal(5,2)');
    prepare stmt from @dml;
    execute stmt;
end
//
delimiter ;

call autoColumns('test2');  

select * from affiliates;  -- you'll see ID and test2 columns

那应该为你做。另请参阅此问题:How To have Dynamic SQL in MySQL Stored Procedure