MySQL 5.7中PREPARE、EXECUTE、DEALLOCATE语句怎么用

技术MySQL 5.7中PREPARE、EXECUTE、DEALLOCATE语句怎么用小编给大家分享一下MySQL 5.7中PREPARE、EXECUTE、DEALLOCATE语句怎么用,相信大部分人都还不怎么了解,因此

边肖想和大家分享一下如何在MySQL 5.7中使用PREPARE、EXECUTE和deal语句。相信大部分人还是不太了解。因此,我想分享这篇文章供你参考。希望你看完这篇文章后收获多多。让我们一起来看看。

PREPARE语句准备好一条SQL语句,并分配给这条SQL语句一个名字供之后调用。准备好的SQL语句通过EXECUTE命令执行,通过DEALLOCATE PREPARE命令释放掉。

语句的名称不区分大小写。准备好的SQL语句的名称可以是字符串或包含用户指定的SQL文本的变量。PREPARE中的SQL文本必须表示单个SQL语句,而不是多个SQL语句。在SQL语句中,字符被用作以后查询执行的参数。不能引用,不能及时绑定到字符变量。

如果准备好的SQL语句名称已经存在,它将在准备新语句之前被释放。这意味着,如果新语句包含错误并且无法准备,将返回错误,并且准备好的SQL语句将不再存在。

准备好的语句范围是在其中创建它的会话,并且具有以下特征:

准备好的语句在其他会话中无效;

当会话结束时,无论会话正常结束还是异常结束,在此会话中准备的SQL语句都将不复存在。如果自动连接功能打开,客户端将不会收到连接丢失的通知。

存储过程或函数中的准备好的语句将在存储过程或函数执行后继续存在,并且可以在存储过程或包之外继续执行。示例:

mysql SET @ a=10

查询正常,0行受影响(0.00秒)

mysql从“从dept2限制中选择*准备STMT?”;

查询正常,0行受影响(0.08秒)

准备的声明

mysql使用@a执行STMT;

- -

| deptno | dname |

- -

| 10 | A |

| 20 | B |

| 30 | C |

| 40 | D |

| 50 | E |

| 60 | F |

| 70 | G |

| 80 | H |

| 90 | I |

| 100 | J |

- -

10行一组(0.02秒)

MySQL SET @ skip=1;SET @ numrows=5;

查询正常,0行受影响(0.00秒)

查询正常,0行受影响(0.00秒)

mysql准备STMT从' SELECT * FROM dept2 LIMIT?';

查询正常,0行受影响(0.00秒)

准备的声明

mysql EXECUTE STMT使用@skip,@ numrows

- -

| deptno | dname |

- -

| 20 | B |

| 30 | C |

| 40 | D |

| 50 | E |

| 60 | F |

- -

5行一组(0.00秒)

mysql解除分配准备STMT;

查询正常,0行后

ted (0.00 sec)

mysql> EXECUTE STMT USING @skip, @numrows;
ERROR 1243 (HY000): Unknown prepared statement handler (STMT) given to EXECUTE

mysql> PREPARE STMT FROM 'SELECT * FROM dept2 LIMIT ?, ?';
Query OK, 0 rows affected (0.00 sec)
Statement prepared

mysql> EXECUTE STMT USING @skip, @numrows;
+--------+-------+
| deptno | dname |
+--------+-------+
|     20 | B     |
|     30 | C     |
|     40 | D     |
|     50 | E     |
|     60 | F     |
+--------+-------+
5 rows in set (0.00 sec)

示例存储过程
delimiter $$
create procedure registerSQLReference(IN the_table_name VARCHAR(80), IN the_sql_script_version VARCHAR(80), IN the_sql_script_name VARCHAR(80),
IN the_install_version  VARCHAR(80), IN the_execution_duration VARCHAR(80), IN the_sql_script_description VARCHAR(200))
BEGIN
declare column_exist INT DEFAULT 0;
declare the_query VARCHAR(500);

  select '[INFO]    Check if the column C_CHANGE_DESCRIPTION exists in the table @VERSION_LEVEL_TABLE_NAME';
  set column_exist = is_ChangeDescColumnExist ('@VERSION_LEVEL_TABLE_NAME');

  IF column_exist = 0
  THEN

    select '[INFO]    VERSION LEVEL TABLE does not contain C_CHANGE_DESCRIPTION column.';
    set @v_the_table_name=the_table_name;
    select concat('INSERT INTO ', @v_the_table_name, ' VALUES (?, ?, ?, ?, ?) ') into the_query;
    SET @stmt=the_query;
    PREPARE STMT FROM @stmt;
    select concat('[INFO]    the_query=', the_query );
    set @v_the_sql_script_version=the_sql_script_version;
    set @v_the_sql_script_name=the_sql_script_name;
    set @v_date=now();
    set @v_the_install_version=the_install_version;
    set @v_the_execution_duration=the_execution_duration;
    EXECUTE STMT using @v_the_sql_script_version , @v_the_sql_script_name, @v_date, @v_the_install_version, @v_the_execution_duration;

  ELSE
    select '[INFO]    VERSION LEVEL TABLE contains C_CHANGE_DESCRIPTION column.';

    select concat('INSERT INTO ', the_table_name, ' VALUES (?, ?, ?, ?, ?, ?) ') into the_query;
    SET @stmt=the_query;
    PREPARE STMT FROM @stmt;
    select concat('[INFO]    the_query=', the_query );
    set @v_the_sql_script_version=the_sql_script_version;
    set @v_the_sql_script_name=the_sql_script_name;
    set @v_date=now();
    set @v_the_install_version=the_install_version;
    set @v_the_execution_duration=the_execution_duration;
    set @v_the_sql_script_description=the_sql_script_description;
    select concat('[INFO]    the_query=', the_query);
    EXECUTE the_query using @v_the_sql_script_version , @v_the_sql_script_name, @v_date, @v_the_install_version, @v_the_execution_duration, @v_the_sql_script_description;

  END IF;
  DEALLOCATE PREPARE STMT;
END$$
delimiter ;

以上是“MySQL 5.7中PREPARE、EXECUTE、DEALLOCATE语句怎么用”这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注行业资讯频道!

内容来源网络,如有侵权,联系删除,本文地址:https://www.230890.com/zhan/59016.html

(0)

相关推荐

  • windows 下如何安装redis

    技术windows 下如何安装redis这篇文章给大家分享的是有关windows 下如何安装redis的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。windows 下安装redis首先解压 r

    攻略 2021年11月15日
  • php_vld怎么用

    技术php_vld怎么用这篇文章主要为大家展示了“php_vld怎么用”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“php_vld怎么用”这篇文章吧。

    攻略 2021年12月10日
  • google my map(google map application)

    技术如何申请Google Map API v2 的API key如何申请Google Map API v2 的API key,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可

    攻略 2021年12月24日
  • 抖音真人赞10个自助下单,介绍下抖音刷真人赞多少钱?

    技术抖音真人赞10个自助下单,介绍下抖音刷真人赞多少钱?于抖音新手怎么快速涨粉丝?
    1、大量关注别人,这样必定会带来许多的粉
    2、评论别人,不停地评论陌生人的抖音,只要看到有人发抖音就去留下高质量的评论,每次都坐上沙发,

    测评 2021年11月9日
  • 垂耳兔为什么不吉利,养垂耳兔要注意什么问题

    技术垂耳兔为什么不吉利,养垂耳兔要注意什么问题我养的就是垂耳兔,说要注意什么的,我其实还真没特别注意,我养了两年,到现在一点儿病没有生过,平时都吃兔粮,但是兔粮营养成分不太跟的上,建议不要单一的吃兔粮,所以我后面加了各种

    生活 2021年10月22日
  • 图解laravel请求的完整生命周期(laravel 判断模型某值持续不变)

    技术Laravel模型时间戳使用小技巧有哪些这篇文章主要介绍Laravel模型时间戳使用小技巧有哪些,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!默认情况下,Laravel Eloquent 模型

    攻略 2021年12月20日