procedure
如果存储过程中含有动态sql语句,在触发器中调用该存储过程时会报错ERROR 1336 (0A000): Dynamic SQL is not allowed in stored function or trigger。
该错误的含义是:函数或者触发器不支持动态SQL语句。下面详细介绍这个错误的重现过程,并提出解决方案。
1.建表
建立人员信息表,包含id和name两列。
CREATE TABLE person (
id int,
name varchar(20)
);
2.建存储过程
表名作为参数传入,创建一张新表,作为person表的日志。
DElimitER $$
CREATE PROCEDURE personLog(IN table_name VARCHAR(20))
BEGIN
SET @name = table_name;
SET @str = CONCAT('create table ', @name,'(id int, name varchar(20))');
PREPARE stmt FROM @str;
EXECUTE stmt;
deallocate PREPARE stmt;
END$$
DELIMITER ;
3.建触发器
当person表中插入数据时,调用存储过程。
DELIMITER $$
CREATE TRIGGER person_trigger after insert on person FOR EACH ROW
BEGIN
call personLog(new.name);
END $$
DELIMITER ;
4.插入数据
insert into person VALUES(1,'April') ;
插入数据时,触发器自动启动并调用存储过程,此时报错:ERROR 1336 (0A000): Dynamic SQL is not allowed in stored function or trigger,即函数或者触发器不支持动态SQL语句。
为了避免该问题,我们可以采用直接调用存储过程的方法。
mysql>call personLog("April");
相关阅读
mysql通过 GRANT 授予权限 , REVOKE 撤销权限授予用户权限:grant all privileges on 层级 to 用户名@主机 identified by '密码
群人数,直接关系群权重;于排名,意义非凡;此法靠谱,笔者亲测。就说这张图,这类关键词,要是没2000人群,不管你多流弊,你是做不上去滴。于QQ
在网上搜索了一个MySQL数据库删除重复数据的sql,原文是这样的: DELETE FROM people WHERE peopleName IN ( SELEC
今天在论坛看到有人说360百科已经开放编辑,所以我先试试给自己网站给添加一个百科,看看360百科的效果如何。百度百科和搜搜百科也都
第一范式第一范式(1NF)要求数据库表的每一列都是不可分割的基本数据项,同一列中不能有多个值。若某一列有多个值,可以将该列单独拆分