mysql - 创建一个 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, "
(标准字段等)
如果要在当前数据库中创建它,我可以做任何事情,但在尝试在不同的数据库中创建时不起作用。希望这足够清楚,可以理解我想要做什么。
提前感谢您提供的任何帮助。
解决方案
从 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>
推荐阅读
- c# - 使用非托管可执行文件时设置 ServicePointManager.SecurityProcol 的正确方法
- java - 循环转发的问题
- android - View.setX 阻止 adjustPan 工作
- angular - 如何让 Bamboo 识别 Angular 单元测试
- java - 等于字符串和列表中的方法使用
- java - Vertx Rx-Java:eventBus 订阅者被取消订阅的原因
- django - 如何从 DRF 模型序列化器的返回字段中去除空格?
- ruby-on-rails - 忽略 ActiveRecord 属性的存在?
- android - 为什么 Gradle for Android 中包含 JavaScript 运行时?
- django - 相关模型 ID 会丢失在验证数据中,即使它存在于请求中