MySql创建存储过程(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);
mysql查看所有存储过程END $$网络爬虫是做什么的
DELIMITER ;
shell题库及答案4.插⼊数据
insert into person VALUES(1,'April') ;
创建表空间语句oracle插⼊数据时,触发器⾃动启动并调⽤存储过程,此时报错:ERROR 1336 (0A000): Dynamic SQL is not allowed in stored function or trigger,即函数或者触发器不⽀持动态SQL语句。
为了避免该问题,我们可以采⽤直接调⽤存储过程的⽅法。
mysql>call personLog("April");
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论