mysql中的DECLARE语句是在复合语句中声明变量的指令。
(1)Example with two DECLARE statements
两个DECLARE语句的实例
CREATE PROCEDURE p8 ()
BEGIN
DECLARE a INT;
DECLARE b INT;
SET a = 5;
SET b = 5;
INSERT INTO t VALUES (a);
SELECT s1 * a FROM t WHERE s1 >= b;
END; // /* I won't CALL this */
在过程中定义的变量并不是真正的定义,你只是在BEGIN/END块内定义了而已(译注:也就是形参)。注意这些变量和会话变量不一样,不能使用修饰符@你必须清楚的在BEGIN/END块中声明变量和它们的类型。变量一旦声明,你就能在任何能使用会话变量、文字、列名的地方使用。
(2)Example with no DEFAULT clause and SET statement
没有默认子句和设定语句的例子
CREATE PROCEDURE p9 ()
BEGIN
DECLARE a INT /* there is no DEFAULT clause */;
DECLARE b INT /* there is no DEFAULT clause */;
SET a = 5; /* there is a SET statement */
SET b = 5; /* there is a SET statement */
INSERT INTO t VALUES (a);
SELECT s1 * a FROM t WHERE s1 >= b;
END; // /* I won't CALL this */
有很多初始化变量的方法。如果没有默认的子句,那么变量的初始值为NULL。你可以在任何时候使用SET语句给变量赋值。
(3)Example with DEFAULT clause
含有DEFAULT子句的例子
CREATE PROCEDURE p10 ()
BEGIN
DECLARE a, b INT DEFAULT 5;
INSERT INTO t VALUES (a);
SELECT s1 * a FROM t WHERE s1 >= b;
END; //
我们在这里做了一些改变,但是结果还是一样的。在这里使用了DEFAULT子句来设定初始值,这就不需要把DECLARE和SET语句的实现分开了。
(4)Example of CALL
调用的例子
mysql> CALL p10() //
+--------+
| s1 * a |
+--------+
| 25 |
| 25 |
+--------+
2 rows in set (0.00 sec)
Query OK, 0 rows affected (0.00 sec)
结果显示了过程能正常工作
(5) Scope
作用域
CREATE PROCEDURE p11 ()
BEGIN
DECLARE x1 CHAR(5) DEFAULT 'outer';
BEGIN
DECLARE x1 CHAR(5) DEFAULT 'inner';
SELECT x1;
END;
SELECT x1;
END; //
现在我们来讨论一下作用域的问题。例子中有嵌套的BEGIN/END块,当然这是合法的。同时包含两个变量,名字都是x1,这样也是合法的。内部的变量在其作用域内享有更高的优先权。当执行到END语句时,内部变量消失,此时已经在其作用域外,变量不再可见了,因此在存储过程外再也不能找到这个声明了的变量,但是你可以通过OUT参数或者将其值指派 给会话变量来保存其值。
调用作用域例子的过程:
mysql> CALL p11()//
+-------+
| x1 |
+-------+
| inner |
+-------+
+-------+
| x1 |
+-------+
| outer |
+-------+
我们看到的结果时第一个SELECT语句检索到最内层的变量,第二个检索到第二层的变量
分享到:
相关推荐
### MySQL中SQL语句游标详解 #### 一、引言 在数据库开发过程中,当开发者需要逐条处理从查询结果集中获取的数据时,游标成为了一种非常实用且强大的工具。本文旨在深入探讨MySQL中游标的概念及其使用方法,帮助...
MySQL中的CASE语句是SQL语言中的一个重要组成部分,它在存储过程和复杂查询中扮演着条件判断的角色,使得代码更加简洁易读。CASE语句提供了两种形式:简单CASE和可搜索CASE。 1. 简单CASE语句: 简单CASE语句主要...
MySQL存储过程中的游标(DECLARE)是处理查询结果集的重要工具,它允许程序逐行处理数据,而不是一次性加载所有结果。游标具有不同的模式,包括只读、不可滚动和敏感,每种模式都有其特定的应用场景。 只读模式的...
本篇文章将深入探讨MySQL存储过程中的`IF`语句及其相关用法。 首先,`IF`语句的基本语法如下: ```sql IF expression THEN statements; END IF; ``` 在这里,`expression`是一个布尔表达式,当其计算结果为`TRUE...
### MySQL存储过程应用详解 #### 一、存储过程概述 在MySQL中,存储过程是一种预编译好的SQL脚本,可以包含复杂的逻辑控制语句、循环结构以及事务处理等功能。通过存储过程,开发者可以在数据库服务器端执行一系列...
在MySQL中,异常定义和处理主要是通过`DECLARE`语句来实现的。 1. **异常定义** 异常定义是创建一个特定的条件(condition),这个条件关联到可能发生的错误或警告。语法如下: ```sql DECLARE condition_name ...
在 MySQL 中,游标是通过 DECLARE 语句定义的,例如: DECLARE fetchSeqCursor CURSOR FOR SELECT seqname, value FROM sys_sequence; 开启游标: OPEN fetchSeqCursor; fetch 数据: FETCH cursor INTO _...
### MySQL 查询存储过程详解 #### 一、存储过程概述 MySQL 存储过程是一种存储在 MySQL 服务器中的 SQL 代码段,它能够被多个客户端多次调用。存储过程的主要优势在于能够简化复杂的 SQL 查询,执行常见的任务,...
在MySQL5.0中,存储过程的引入极大地增强了数据库的功能性和灵活性。 ### 存储过程定义 存储过程是一种存储在数据库中的程序,它由一系列SQL语句组成,可以被多次调用而不必重新编译。这类似于编程语言中的函数或...
### Shell脚本中执行SQL语句操作MySQL的五种方法详解 #### 一、引言 在日常的系统管理和维护工作中,尤其是对于自动化运维任务,如数据库备份与恢复等场景,常常需要通过Shell脚本来执行SQL语句来操作MySQL数据库。...
### MySQL中游标的使用案例详解 #### 一、游标概念 在MySQL中,游标是一种重要的机制,它允许用户逐步处理查询结果集中的每一行数据。游标提供了一种方式来迭代处理查询结果,这对于需要逐行访问数据的情况特别有用...
通过上述内容的学习,我们了解到 MySQL 存储过程中的基本概念及其使用方法。正确地使用这些结构可以帮助开发者更加高效地管理数据库操作,减少代码的复杂度,提升程序的性能。希望本文能为你在 MySQL 存储过程的学习...
MySQL游标是数据库管理系统提供的一种机制,允许程序按需逐行...了解其概念和正确使用方法,能帮助开发者更有效地处理数据库中的数据。在实际应用中,应当根据具体情况权衡是否使用游标,以达到最佳性能和资源利用。
### SQL语句大全详解 #### 一、概述 SQL(Structured Query Language)是一种用于管理关系...以上是对SQL语句大全的详细介绍,涵盖了常见的SQL语句及其使用方法,旨在帮助数据库开发者和管理员更好地管理和操作数据。
### MySQL存储过程详解 #### 存储过程简介 在MySQL中,存储过程是一种预先定义并编译好的SQL语句集合,它可以实现...同时,掌握好存储过程和函数的设计与使用方法,对于提高开发效率和减少维护成本也具有重要意义。
通过本文的详细介绍,希望读者能够掌握存储过程的基本概念和使用方法,并能够在实际项目中灵活运用这一功能。 通过以上的介绍和示例,可以看出MySQL 5.0存储过程的强大之处,无论是对于数据库的管理还是对于应用...