Я не могу использовать ввод в процедуре Mysql

0

Я определил процедуру в MySql, которая имеет вход и вход, будет именем столбца, который будет добавлен в таблицу 'test1', но sql-имена, которые вводят в столбцы вместо использования значения ввода. Как я могу сделать это в правой путь?

DELIMITER 
CREATE PROCEDURE p1
(IN input CHAR(20))
BEGIN
ALTER TABLE test1
ADD COLUMN input char(20);
END 
DELIMITER ;
  • 1
    Вы должны использовать динамический SQL для этого.
  • 0
    @ P.Salmon что это?
Теги:
stored-procedures

1 ответ

1
Лучший ответ

Вам нужно google dynamic sql и прочитать руководство https://dev.mysql.com/doc/refman/8.0/en/sql-syntax-prepared-statements.html. Тем временем здесь приведен пример.

drop procedure if exists  p;
alter table users 
    drop column abc;
DELIMITER  $$
CREATE PROCEDURE p
(IN input CHAR(20))
BEGIN
#ALTER TABLE test1
#ADD COLUMN input char(20);
set @sql = concat('alter table users add column ',input,' char(20);');
select @sql;
prepare sqlstmt from @sql;
execute sqlstmt;
deallocate prepare sqlstmt;
END $$
DELIMITER ;

call p('abc');
describe users;

MariaDB [sandbox]> call p('abc');
+--------------------------------------------+
| @sql                                       |
+--------------------------------------------+
| alter table users add column abc char(20); |
+--------------------------------------------+
1 row in set (0.00 sec)

Query OK, 0 rows affected (0.42 sec)

MariaDB [sandbox]> describe users;
+---------------------+-------------+------+-----+-------------------+-------+
| Field               | Type        | Null | Key | Default           | Extra |
+---------------------+-------------+------+-----+-------------------+-------+
| id                  | int(11)     | NO   | PRI | NULL              |       |
| userName            | varchar(60) | NO   |     | NULL              |       |
| photo               | varchar(50) | YES  |     | NULL              |       |
| status              | int(11)     | YES  |     | NULL              |       |
| ts                  | datetime    | YES  |     | CURRENT_TIMESTAMP |       |
| events_participated | int(11)     | YES  |     | NULL              |       |
| fb_uid              | int(11)     | YES  |     | NULL              |       |
| Column_name         | varchar(10) | YES  |     | NULL              |       |
| post_type           | varchar(10) | YES  |     | NULL              |       |
| password            | varchar(8)  | YES  |     | NULL              |       |
| abc                 | char(20)    | YES  |     | NULL              |       |
+---------------------+-------------+------+-----+-------------------+-------+
11 rows in set (0.03 sec)

Ещё вопросы

Сообщество Overcoder
Наверх
Меню