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)

相关推荐

  • 信用卡注销,我想把信用卡注销了怎么操作

    技术信用卡注销,我想把信用卡注销了怎么操作首先信用卡注销,在注销信用卡前一定要确定你的信用卡账单情况, 要确保你的卡里无欠款。
    如果是有欠款,需要将这部分欠款还清,然后再进行下面的注销操作。 02
    在信用卡账单偿还完

    生活 2021年10月25日
  • linux系统查看任务计划程序(linux查看系统中的计划任务命令)

    技术linux系统中计划任务怎么实现这篇文章主要讲解了“linux系统中计划任务怎么实现”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“linux系统中计划任务怎么实现”吧

    攻略 2021年12月23日
  • 指针的初步学习

    技术指针的初步学习 指针的初步学习1.指针变量计算机将内存分割为字节,字节可以存储八位的信息,而每个字节都有唯一的地址。如下,如果内存中有n个字节,可以把地址看作0到n-1的数地址
    内容0  
    0101

    礼包 2021年11月15日
  • Java中如何使用Iterator和Iterable接口

    技术Java中如何使用Iterator和Iterable接口这篇文章主要介绍“Java中如何使用Iterator和Iterable接口”,在日常操作中,相信很多人在Java中如何使用Iterator和Iterable接口

    2021年11月17日
  • SQLServer中Tempdb空间异常增长及占用非常大该怎么办

    技术SQLServer中Tempdb空间异常增长及占用非常大该怎么办SQLServer中Tempdb空间异常增长及占用非常大该怎么办,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章

    攻略 2021年11月29日
  • 女娲补天翻译,怎样正确理解“万恶淫为首”

    技术女娲补天翻译,怎样正确理解“万恶淫为首”真人真事女娲补天翻译,巳经过去了六年了!农村有买新娘现象,这就是真事,男的巳经三十多岁了,家里正为他 筹备婚事,女是越南妹,由于身份问题,不能 正式登记结婚,农村也我直接摆酒请

    生活 2021年10月22日