易截截图软件、单文件、免安装、纯绿色、仅160KB

关于mysql中触发器执行动态sql的问题

    这几天手头开发的系统要做一个类似windows账户到期时间的功能,考虑了半天想出了一个技术上和逻辑上都还能实现的解决方案:
创建一个用户存入数据库的时候都创建一个事件调度器来控制用户的到期时间(mysql的时间调度器确实很方便)。想起来是很简单,但是做起来问题确实一波接一波...
一些小问题就不说了,到了关键的地方了:在插入一个用户的时候我到底是在应用层来添加一个事件调度器呢还是在数据库里面自动添加。
当然不管从代码的美观上、系统设计的思想上或是运行效率上来说,我都应该选择后者(废话...)。于是我就选择了后者(你敢再说废话吗)。那么就有了今天的这段笔记...
    一开始我兴致勃勃的拼好字符串什么的,写了如下一个触发器
delimiter //
create trigger tri_user after insert on user for each row
begin
set @u_name = new.u_name;
set @expire = '';
select sm_pwd_alter_day into @expire from system_manage where sm_id = 1;
set @str = concat('create EVENT eve_', @u_name, ' ON SCHEDULE EVERY ', @expire, ' day DO
update user set u_enable = \'未启用\' where u_name = \'', @u_name, '\'');
prepare stmt_str from @str;
execute stmt_str;
DEALLOCATE PREPARE stmt_str;
end;
//
delimiter ;
仔细检查了语法,然后兴高采烈的运行...(orz)结果却是下面这行错误提示:
“Dynamic SQL is not allowed in stored function or trigger”
my god,原来mysql的触发器不支持动态sql,于是上网baidu寻找替代方法,无果,
然后google,方法出现:有人也遇到了触发器里执行动态sql的问题,然后发帖,后面高手解答说
把动态sql语句传入存储过程里,然后在触发器里调用存储过程就可以了。然后那位楼主还给了高手
70分(悲剧,后面说)...我想这次到位了。于是模仿之、于是运行之、于是出现结果:
“Dynamic SQL is not allowed in stored function or trigger”
卧槽...还是这个结果...
于是我明白了结了贴的也不一定是正确答案。
那么我以为存储过程里运行动态sql,然后触发器再调用这个存储过程,还是相当于在触发器里运行动态sql。
不想再去深究了,还是老老实实在应用程解决这个问题了。


相关文档:

mysql存储过程 赋值

IN expireDate VARCHAR(20),IN resType INT
//-----------------------------------------------------------------------------------
BEGIN
DECLARE a,b,icon_id INT;
DECLARE cur_1 CURSOR FOR SELECT id from `tbl_resource` WHERE discriminator="RC_CON"  and robot_type=resType and  add_date<=ex ......

SQL存储过程测试(5)——从T

问题
      如何让T-SQL测试套件把测试用例结果直接写入文本文件
设计
      使用ActiveX技术实例化一个FileSystemObject对象,然后通过OpenTextFile()和WriteLine()方法直接把测试结果写入文件。
方案
declare @fsoHandle int,@fileID int
exec sp_OACreate 'Scr ......

sql 全文索引

1、要启用全文索引功能首先需要安装full text search全文索引服务
2、启动full text search服务
3、先创建Unique索引和全文索引:CREATE FULLTEXT INDEX ON table_name
4、每个表只允许创建一个全文索引
删除全文索引 DROP FULLTEXT INDEX ON table_name
全文搜索语句,contains(),freeText()
注 ......

JDBC连接SQL Server 2005的方法

一、下载安装
1、SQL Server 2005 Express Edition
下载 SQL Server 2005 Express Edition(下载页面):
http://msdn.microsoft.com/vstudio/express/sql/download/
安装完数据库后设置ICP/IP协议启动(这一步不能少,默认是TCP/IP不启用的),具体如下:
(1)打开SQL Server Configuration Manager
(2)转到SQL S ......

查看sql server lock


 drop   table   #t  
  create   table   #t(req_spid   int,obj_name   sysname)   
  declare   @s   nvarchar(4000)   
  ,@rid   int,@dbname   sysname,@id   int,@objname   sysnam ......
© 2009 ej38.com All Rights Reserved. 关于E健网联系我们 | 站点地图 | 赣ICP备09004571号