在创建数据库和表之前创建一个过程

Posted

技术标签:

【中文标题】在创建数据库和表之前创建一个过程【英文标题】:Creating a Procedure prior to the creation of database and table 【发布时间】:2021-05-31 14:42:17 【问题描述】:

我在创建数据库的过程中尝试创建Procedure,mysql查询如下:

CREATE DATABASE database_Sensor1;
USE database_Sensor1;
CREATE TABLE Persons(id int NOT NULL);
DELIMITER //
CREATE PROCEDURE MYLOOP() IF database_Sensor1 EXISTS
BEGIN 
      DECLARE i int;
      DECLARE str varchar(255);
      SET i = 0;
      WHILE i < 32 DO
               SET str = CONCAT('col_',i);
               SET @sql = CONCAT('ALTER TABLE persons ADD ',str,' float;');
               SET i = i + 1;
               PREPARE stmt FROM @sql;
               EXECUTE stmt;
               DEALLOCATE PREPARE stmt;
      END WHILE;
 END
DELIMITER ;
CALL MYLOOP();

但我收到此错误:

#1305 - 过程 database_sensor1.MYLOOP 不存在

我正在尝试使用过程来循环创建表,方法是快速更改表以添加 32 列,以便我可以运行另一个 .php 来添加值。

【问题讨论】:

【参考方案1】:
CREATE DATABASE database_Sensor1;
USE database_Sensor1;
CREATE TABLE database_Sensor1.Persons(id int NOT NULL);
DELIMITER //
CREATE PROCEDURE database_Sensor1.MYLOOP()
BEGIN 
      DECLARE i int;
      DECLARE str varchar(255);
      SET i = 0;
      WHILE i < 32 DO
               SET str = CONCAT('col_',i);
               SET @sql = CONCAT('ALTER TABLE database_Sensor1.persons ADD ',str,' float;');
               SET i = i + 1;
               PREPARE stmt FROM @sql;
               EXECUTE stmt;
               DEALLOCATE PREPARE stmt;
      END WHILE;
 END
//
DELIMITER ;
CALL MYLOOP();

版本:

    IF database_name EXISTS 构造不存在。已移除。见第 3 版。 过程创建代码未使用定界符完成。已添加。 未明确指定必须在其中创建过程的数据库。添加。如果数据库不存在,则会产生错误。与表名相同。

【讨论】:

以上是关于在创建数据库和表之前创建一个过程的主要内容,如果未能解决你的问题,请参考以下文章

在 PostgreSQL 中为特定模式和表所有者创建表的过程是啥

django重新创建数据库和表

存储过程和函数

在运行时按需创建模式和表

通过将列和表名作为参数传递来创建 BigQuery 存储过程

ACCESS里如何用SQL语句创建数据库和表