我正在将一个项目移交给我已经做了一段时间的另一方,在这个项目中,我通过添加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()
来做到这一点...我的意思是有一种方法将此调用或多个调用语句放入存储的进程中,并在运行特定存储的进程后一次性执行所有调用语句
答案 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步?),那么,不,你不能......这是一个“存储”过程,必须先存储才能执行。