我正在一个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();请帮助我了解这个问题。
发布于 2014-01-23 13:44:27
我已经修改了您的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日最新消息
创建示例数据库并在该示例数据库中创建所需的所有表,然后可以使用此示例数据库创建其他数据库。
https://stackoverflow.com/questions/21309596
复制相似问题