数据库: MySQL5.1
操作工具:SQLyog企业版
首先在一个数据库中有一张user表,里面有一些数据,我们想把它通过存储过程备份到user_arc(本来没有的表)中。储存过程的sql如下:
DELIMITER $$
USE `nn`$$
DROP PROCEDURE IF EXISTS `arcUser`$$
-- 上面是自动生成的
CREATE DEFINER=`root`@`localhost` PROCEDURE `arcUser`(IN orgitable CHAR(10))
-- 这里传入将被备份的数据库表名字 orgitable
BEGIN
SET @stmt = CONCAT("create table ",orgitable,"_arc","(Select * from user);");
-- 因为我们用orgitable代表数据库表名,所以不能用普通的语句如:create table orgitable + "_arc" (Select * from orgitable)
PREPARE stmt FROM @stmt;
EXECUTE stmt;
END$$
DELIMITER ;
然后去call这个arcUser,把要备份的表名传进去啊,例如“User”.
注:Oracle10g实现这个功能和mySQL的有所不同,如下:
create or replace package body pdc is
procedure arcUser(tableName varchar2)
as
createSQL varchar2(200);
begin
createSQL := 'create table '||tableName||'_arc as select * from '||tableName||';
-- 注意,这里连接字符串应该用||,而不是java中的+
execute immediate createSQL;
commit;
end;
end;
by NN 2009-10-13