Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/62.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
可以从存储过程中使用动态SQL创建MySQL触发器吗?_Mysql_Triggers_Dynamic Sql - Fatal编程技术网

可以从存储过程中使用动态SQL创建MySQL触发器吗?

可以从存储过程中使用动态SQL创建MySQL触发器吗?,mysql,triggers,dynamic-sql,Mysql,Triggers,Dynamic Sql,是否可以使用存储过程中动态生成的SQL在MySQL中创建触发器?我通过准备语句在过程中执行其他动态构造的查询,但是当我尝试使用相同的方法创建触发器时,我得到以下错误: 错误代码:1295准备好的语句协议尚不支持此命令 从2007年开始,我看到其他人也在抱怨同样的事情 从表面上看,它还没有被修复 这个问题有解决办法吗?是否有另一种使用动态SQL创建触发器的方法 基本上,我试图做的是动态创建触发器,用于记录各种不同表上插入的审核数据。我在*audit_tables*表中列出了我要审核的表。下面的精简

是否可以使用存储过程中动态生成的SQL在MySQL中创建触发器?我通过准备语句在过程中执行其他动态构造的查询,但是当我尝试使用相同的方法创建触发器时,我得到以下错误:

错误代码:1295准备好的语句协议尚不支持此命令

从2007年开始,我看到其他人也在抱怨同样的事情

从表面上看,它还没有被修复

这个问题有解决办法吗?是否有另一种使用动态SQL创建触发器的方法

基本上,我试图做的是动态创建触发器,用于记录各种不同表上插入的审核数据。我在*audit_tables*表中列出了我要审核的表。下面的精简过程迭代该表中的条目,并尝试创建触发器

drop procedure if exists curtest;
delimiter |
create procedure curtest()
BEGIN
    DECLARE done INT DEFAULT 0;
    declare tn varchar(16);
    declare cur cursor for select table_name from audit_tables;
    DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = 1;
    OPEN cur;
    read_loop: LOOP
        fetch cur into tn;
        if done then
            leave read_loop;
        end if;

        /* Create the BEFORE INSERT trigger */
        set @sql = concat('CREATE TRIGGER audit_', tn, '_bi BEFORE INSERT ON ', tn, '
            FOR EACH ROW BEGIN
                set new.foo="bar";
            END;');
        PREPARE stmt FROM @sql;
        EXECUTE stmt;
        DEALLOCATE  PREPARE stmt;
    end LOOP;
    close cur;
END;
|
delimiter ;

call curtest();

正如您提到的错误所说,在准备好的语句中不支持
CREATE TRIGGER
命令


我认为更可行的选择是使用具有MySQL绑定的脚本语言(如PHP)来自动创建触发器。顺便说一句,我记得MySQL Workbench使用Lua作为这类事情的脚本语言。

我想问同样的问题。我甚至尝试将触发器数据直接插入information_schema.triggers表,但根帐户都无权这样做。因为我必须创建很多触发器,所以手动创建触发器非常烦人。