5

我可以使用存储过程创建表吗?

我正在使用 MySQL。我在网上搜索了有关如何使用存储过程创建表的说明,但没有找到任何结果,我只是发现可以创建临时表。如果我使用存储过程创建表有什么问题吗?

实际上我想检查一个表是否存在,然后我必须创建它。

4

4 回答 4

6

您可以使用 mysql 中的过程创建表。

delimiter |
CREATE PROCEDURE SP_CREATE_TABLE_TEST ()
   BEGIN
      CREATE TABLE TEST 
      (
        TestID int(11) default NULL,
        TestName varchar(100) default NULL
      ) 
      ENGINE=InnoDB DEFAULT CHARSET=utf8;
   END;

|

参考链接。

于 2012-06-19T12:21:07.177 回答
4

编辑:谢谢彼得!所以这个特定问题的解决方案:

DELIMITER //
CREATE PROCEDURE createTable(IN tableName VARCHAR(40))
BEGIN
SET @table := tableName;
SET @sql_text:=CONCAT('CREATE TABLE ',@table,'(id INT NOT NULL AUTO_INCREMENT, FILENAME VARCHAR(40) NOT NULL, DATA BLOB NOT NULL, PRIMARY KEY (ID))');

PREPARE stmt from @sql_text;
EXECUTE stmt;
END //
DELIMITER ;

除了手册之外,我还发现了 Roland Bouman 的一个非常有用的 tut:

http://rpbouman.blogspot.com/2005/11/mysql-5-prepared-statement-syntax-and.htmlenter code here

El autor de la respuesta: Conrad Ljungström

原文链接: https ://forums.mysql.com/read.php? 98,495352

于 2020-05-31T21:03:50.563 回答
0

您可以毫无问题地在存储过程中创建表。例子:

delimiter |

create procedure createtab () 
begin 
    create table a(id int);
    insert into a select 1;
    select * from a;
    drop table a;
end
|

delimiter ;
于 2012-06-19T12:20:21.530 回答
0

像这样的东西应该工作。

delimiter |
CREATE PROCEDURE SP_CREATE_TABLE( )
BEGIN
  CREATE TABLE employees (emp_id int, emp_name varchar(100));
END;
|
于 2012-06-19T12:20:43.407 回答