mysql存储过程中如何调用变量作为表名
2014-04-15 13:54
537 查看
蓝1的需求,定时将15天前的manager_info_‘日期’表删除。这个需求从操作系统端也可以实现,只要利用rm写一个脚本即可,很方便。但是如果数据库的表文件没有使用独立表空间,或者在没有操作系统文件权限的情况下,dba就需要在数据库的角度,利用存储过程来实现了。
在编写过程中要注意:简单的用set或者declare语句定义变量,然后直接作为sql的表名是不行的,mysql会把变量名当作表名。
在其他的关系型数据库中也是如此,mysql的解决方法是将整条sql语句作为变量,其中穿插变量作为表名,然后用sp_executesql调用该语句。这在mysql5.0之前是不行的,5.0之后引入了一个全新的语句,可以达到类似sp_executesql的功能(仅对procedure有效,function不支持动态查询)语法如下:PREPARE statement_name FROM preparable_SQL_statement; /*定义*/
EXECUTE statement_name [USING @var_name [, @var_name] ...]; /*执行预处理语句*/
{DEALLOCATE | DROP} PREPARE statement_name /*删除定义*/ ;
附存储过程代码:
DROP PROCEDURE IF EXISTS `pro_deltable`;DELIMITER ;;
CREATE PROCEDURE pro_deltable ()
BEGIN DECLARE X VARCHAR(50); SET @X = concat ('drop table test','.','`','manager_info_',DATE_FORMAT(date_add(curdate(),interval -2 day),'%Y-%m-%d'),'`',';'); insert into test.v1 values(@X); PREPARE DS from @X; execute DS; END;;DELIMITER ;;
在以上的例子中就是把@X作为整条sql传入DS,调用DS。最后达到删除test库中的manager_info_2014-02-09表
mysql> select * from v1;+------------------------------------------------+| id |+------------------------------------------------+| drop table test.`manager_info_2014-02-10`; | +------------------------------------------------+
在编写过程中要注意:简单的用set或者declare语句定义变量,然后直接作为sql的表名是不行的,mysql会把变量名当作表名。
在其他的关系型数据库中也是如此,mysql的解决方法是将整条sql语句作为变量,其中穿插变量作为表名,然后用sp_executesql调用该语句。这在mysql5.0之前是不行的,5.0之后引入了一个全新的语句,可以达到类似sp_executesql的功能(仅对procedure有效,function不支持动态查询)语法如下:PREPARE statement_name FROM preparable_SQL_statement; /*定义*/
EXECUTE statement_name [USING @var_name [, @var_name] ...]; /*执行预处理语句*/
{DEALLOCATE | DROP} PREPARE statement_name /*删除定义*/ ;
附存储过程代码:
DROP PROCEDURE IF EXISTS `pro_deltable`;DELIMITER ;;
CREATE PROCEDURE pro_deltable ()
BEGIN DECLARE X VARCHAR(50); SET @X = concat ('drop table test','.','`','manager_info_',DATE_FORMAT(date_add(curdate(),interval -2 day),'%Y-%m-%d'),'`',';'); insert into test.v1 values(@X); PREPARE DS from @X; execute DS; END;;DELIMITER ;;
在以上的例子中就是把@X作为整条sql传入DS,调用DS。最后达到删除test库中的manager_info_2014-02-09表
mysql> select * from v1;+------------------------------------------------+| id |+------------------------------------------------+| drop table test.`manager_info_2014-02-10`; | +------------------------------------------------+
相关文章推荐
- 数据库链接字符串查询网站
- 应用领航:盘点那些年我们一起追过的OS
- 无奇不有!盘点各国自己开发的操作系统
- DB2实例管理
- DB2实例管理
- mysql问答汇集
- 创建一个空的IBM DB2 ECO数据库的方法
- Access 2000 数据库 80 万记录通用快速分页类
- 开通一个数据库失败的原因的和解决办法
- 一个简单的asp数据库操作类
- DB2比较常用与实用sql语句总结
- EasyASP v1.5发布(包含数据库操作类,原clsDbCtrl.asp)第1/2页
- sql2008 还原数据库解决方案
- Oracle 数据库自动存储管理-安装配置
- Oracle 数据库 临时数据的处理方法
- 最近比较流行的数据库挂马
- 重装主控服务器后,数据库连接失败的解决办法:请正确还原数据库。
- 九种防MDB数据库被下载的方法小结
- asp向数据库插入数据的方法rs