MySQL程序语法

时间:2017-06-09 22:59:30

标签: mysql syntax procedure

你们中的任何人都知道如何在MySQL程序中使用VARCHAR参数吗? 我尝试了以下方法:

DELIMITER $$
CREATE PROCEDURE `procedure_name` (IN name VARCHAR(64))
BEGIN
    CREATE TABLE IF NOT EXISTS CONCAT(name) (`id` INT(11) PRIMARY KEY AUTO_INCREMENT, `uid` VARCHAR(32));
    CREATE TABLE IF NOT EXISTS `name` (`id` INT(11) PRIMARY KEY AUTO_INCREMENT, `uid` VARCHAR(32));
    CREATE TABLE IF NOT EXISTS name (`id` INT(11) PRIMARY KEY AUTO_INCREMENT, `uid` VARCHAR(32));
END$$
DELIMITER ;

CALL procedure_name('test');

但它总是创建一个名为“name”的表而不是“test”。

2 个答案:

答案 0 :(得分:0)

您需要使用CONCATstatement构建查询并执行它,例如:

DELIMITER $$
CREATE PROCEDURE `procedure_name` (IN name VARCHAR(64))
BEGIN 

    SET @query = CONCAT('CREATE TABLE IF NOT EXISTS', name, '(`id` INT(11) PRIMARY KEY AUTO_INCREMENT, `uid` VARCHAR(32))');
    PREPARE stmt FROM @query ;
    EXECUTE stmt;
    DEALLOCATE PREPARE stmt;

END$$
DELIMITER ;

答案 1 :(得分:0)

Name似乎是一个保留关键字。 IN也是参数的默认类型。试试这个:

DELIMITER $$
CREATE PROCEDURE `procedure_name` ( p_name VARCHAR(64))
BEGIN
    CREATE TABLE IF NOT EXISTS p_name (`id` INT(11) PRIMARY KEY AUTO_INCREMENT, `uid` VARCHAR(32));
END$$
DELIMITER ;