在一个脚本中执行所有存储过程

时间:2015-01-01 01:02:51

标签: mysql stored-procedures

我正在将一个项目移交给我已经做了一段时间的另一方,在这个项目中,我通过添加coloumns,重命名coloumns等对一些现有表做了一些修改。 当我处理项目时我做的是,在从查询浏览器调用函数运行后,将更改或修改放在存储的进程中。

存储过程

CREATE DEFINER=`my_db`@`10.%` PROCEDURE `alter_test_1`()
BEGIN
DECLARE v_finished INTEGER DEFAULT 0;
DECLARE v_table VARCHAR(100) DEFAULT "";
DECLARE stmt VARCHAR(500) DEFAULT "";
DECLARE column_cursor CURSOR FOR 
SELECT TABLE_NAME FROM `information_schema`.`tables` WHERE table_schema = 'my_db' 
AND table_name LIKE 'tot_table_%';
DECLARE CONTINUE HANDLER 
FOR NOT FOUND SET v_finished = 1;
OPEN column_cursor;
alter_tables: LOOP
FETCH column_cursor INTO v_table;
IF v_finished = 1 THEN
LEAVE alter_tables;
END IF;
SET @prepstmt = CONCAT('ALTER TABLE my_db','.',v_table,' CHANGE OS platform VARCHAR(25);');
PREPARE stmt FROM @prepstmt; 
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
END LOOP alter_tables;
CLOSE column_cursor;
END

之后我跑

call alter_test_1();

在查询浏览器中。

现在我把这两个步骤执行起来并不专业,因此有一种方法让我通过使用另一个存储的程序而不是单独运行call alter_test_1()来做到这一点...我的意思是有一种方法将此调用或多个调用语句放入存储的进程中,并在运行特定存储的进程后一次性执行所有调用语句

1 个答案:

答案 0 :(得分:0)

嗯......你通过调用它来调用另一个存储过程中的存储过程。

CREATE PROCEDURE `do_things`()
BEGIN

  CALL `alter_test_1`();
  CALL `do_more_stuff`();

END 

执行CALL do_things();将首先运行您的程序,然后执行一个名为“do_more_stuff”的程序,然后返回。除非您使用HANDLER捕获错误,否则它将在抛出的第一个未处理错误时终止。

这似乎是你问的问题的答案。我不清楚这是否是你想要提出的问题,因为你谈到“两步执行”,我不知道这两个步骤是什么。

如果你问如何运行一个存储过程(第2步?)而没有首先声明(第1步?),那么,不,你不能......这是一个“存储”过程,必须先存储才能执行。