[英]How to execute the other schema stored procedures?
我在一个Java Web应用程序项目中工作。 我有这样的要求,我想调用其他架构存储过程以在某些其他架构中执行。
但是,当我尝试这种方法时,它显示error like the table already exists(contains in SP).
我可以理解问题所在,它在创建存储过程的同一模式中调用存储过程。
以下是详细说明
1. Schema1(Subscription) - Stored procedure created is here
2. Schema2(Subscription1)- Executing the stored procedure here like following
> USE Subscription1;
> CALL subscription.createcorporatedbproc();
请帮助我了解此问题。
我已经修改了您的SP,您可以在一个模式中创建它并从那里调用它,您只需要将数据库名称作为参数传递给您即可在其中创建表。
DELIMITER $$
CREATE DEFINER=`root`@`localhost` PROCEDURE `createCorporateDBProc`(IN DBName CHAR(100))
BEGIN
SET @DBName = DBName;
SET @varSQL = CONCAT('CREATE TABLE IF NOT EXISTS ',@DBName,'.xxxx( ORDER_ORDER_ID BIGINT(20) NOT NULL, INFO_ID BIGINT(20) NOT NULL, OFFER_ID BIGINT(20) NOT NULL ) ENGINE=INNODB DEFAULT CHARSET=latin1;' );
PREPARE stmt FROM @varSQL;
EXECUTE stmt ;
DEALLOCATE PREPARE stmt;
/** If you need to create more tables , Replicate these 4 lines with your table structure **/
SET @varSQL = CONCAT('CREATE TABLE IF NOT EXISTS ',@DBName,'.yyyy( ID BIGINT(20) NOT NULL, InfoID BIGINT(20) NOT NULL, TagID BIGINT(20) NOT NULL ) ENGINE=INNODB DEFAULT CHARSET=latin1;' );
PREPARE stmt FROM @varSQL;
EXECUTE stmt ;
DEALLOCATE PREPARE stmt;
END $$
DELIMITER ;
测试CALL语句,我将创建一个新数据库,然后将其调用SP以在其中创建表。
mysql> create database mydb_test;
Query OK, 1 row affected (0.00 sec)
mysql> CALL createCorporateDBProc('mydb_test');
Query OK, 0 rows affected (0.24 sec)
mysql> show tables from mydb_test;
+---------------------+
| Tables_in_mydb_test |
+---------------------+
| xxxx |
+---------------------+
1 row in set (0.00 sec)
2014年1月26日更新
创建一个示例数据库,并在该示例数据库中创建所需的所有表,然后可以使用此示例数据库创建其他数据库
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.