必威体育Betway必威体育官网
当前位置:首页 > IT技术

MySql创建存储过程(procedure)

时间:2019-09-06 00:41:06来源:IT技术作者:seo实验室小编阅读:81次「手机版」
 

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 给用户赋权和删除权限

mysql通过 GRANT 授予权限 , REVOKE 撤销权限授予用户权限:grant all privileges on 层级 to 用户名@主机  identified by  '密码

QQ群技术:0成本创建2000人QQ群技巧

群人数,直接关系群权重;于排名,意义非凡;此法靠谱,笔者亲测。就说这张图,这类关键词,要是没2000人群,不管你多流弊,你是做不上去滴。于QQ

MySQL——DELETE语句中的坑

在网上搜索了一个MySQL数据库删除重复数据的sql,原文是这样的: DELETE FROM people WHERE peopleName IN ( SELEC

浅谈360百科与搜搜百科词条的创建

今天在论坛看到有人说360百科已经开放编辑,所以我先试试给自己网站给添加一个百科,看看360百科的效果如何。百度百科和搜搜百科也都

MySQL数据库-三大范式

第一范式第一范式(1NF)要求数据库表的每一列都是不可分割的基本数据项,同一列中不能有多个值。若某一列有多个值,可以将该列单独拆分

分享到:

栏目导航

推荐阅读

热门阅读