首页 > 解决方案 > 创建一个 MYSQL 存储过程以在不同的数据库中创建表

问题描述

我正在尝试创建一个可以跨多个数据库使用但不必在所有数据库中复制存储过程的存储过程。

示例:在 BIZ_ADM 中有可以运行的存储过程,并且可以将参数传递给它,这将在另一个数据库 BIZ_OPS 中创建表和视图

呼叫CreateNewEntity1('KTC_SHARED','TEST1','SHARED');

分隔符 $$

使用KTC_SHARED$$

如果存在则删除程序CreateNewEntity1$$

CREATE DEFINER= root@ 192.168.0.%PROCEDURE CreateNewEntity1(IN databaseNameSTR VARCHAR (64), IN entityNameSTR VARCHAR(64), IN extSTR VARCHAR(64))

开始

SET @sqlSTR = CONCAT("创建表TBL_", entityNameSTR, "(标准字段等)

如果要在当前数据库中创建它,我可以做任何事情,但在尝试在不同的数据库中创建时不起作用。希望这足够清楚,可以理解我想要做什么。

提前感谢您提供的任何帮助。

标签: mysql

解决方案


从 CLI 窗口复制:

Server version: 8.0.21 MySQL Community Server - GPL

Copyright (c) 2000, 2020, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> USE test
Database changed
mysql> CREATE DATABASE test1;
Query OK, 1 row affected (0.15 sec)

mysql> DELIMITER ;;
mysql> CREATE PROCEDURE test1.createtable (IN db VARCHAR(64), IN tb VARCHAR(64))
    -> BEGIN
    -> SET @sql:=CONCAT('CREATE TABLE ', db, '.', tb, '(id INT, val INT);');
    -> PREPARE stmt FROM @sql;
    -> EXECUTE stmt;
    -> DROP PREPARE stmt;
    -> END; ;;
Query OK, 0 rows affected (0.19 sec)

mysql> DELIMITER ;
mysql> SHOW TABLES;
Empty set (0.09 sec)

mysql> CALL test1.createtable('test', 'test');
Query OK, 0 rows affected (0.66 sec)

mysql> SHOW TABLES FROM test;
+----------------+
| Tables_in_test |
+----------------+
| test           |
+----------------+
1 row in set (0.11 sec)

mysql>

推荐阅读