2015-10-16 2 views
0

Я пытаюсь сделать процедуру, которая создаст столбец в данной таблице, если она не существует. Имя нового столбца должно быть взято из аргумента, который я назвал «colname».Как я могу получить доступ к аргументам процедуры MySQL?

Однако это не работает, он создает столбец, но с фактическим именем «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');; 

ответ

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

+0

Это прекрасно, спасибо большое! :) –

1

В переменных mysql нельзя динамически определять имена таблиц или столбцов, только значения. Чтобы достичь того, что вы хотите, вам нужно собрать sql как строку и выполнить его динамически с помощью prepared statement. См. Третий пример в связанной документации.

Смежные вопросы