`
jayghost
  • 浏览: 429733 次
  • 性别: Icon_minigender_1
  • 来自: 成都
社区版块
存档分类
最新评论

mysql中declare语句用法详解

    博客分类:
  • SQL
 
阅读更多

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存储过程之游标(DECLARE)原理与用法详解

    本文实例讲述了mysql存储过程之游标(DECLARE)原理与用法。分享给大家供大家参考,具体如下: 我们在处理存储过程中的结果集时,可以使用游标,因为游标允许我们迭代查询返回的一组行,并相应地处理每行。mysql的...

    MySQL数据库:流程控制语句while语句.pptx

    2)掌握 —— WHILE循环语句的使用方法 WHILE循环语句 MySQL支持3条用来创建循环的语句:WHILE、REPEAT和LOOP语句。 WHILE语句语法格式为: [begin_label:] WHILE search_condition DO statement_list END WHILE ...

    MySQL常用基本SQL语句小结

    SQL分类: DDL—数据定义语言(CREATE,ALTER,DROP,DECLARE) DML—数据操纵语言(SELECT,DELETE,UPDATE,INSERT) DCL—数据控制语言(GRANT,REVOKE,COMMIT,ROLLBACK

    MySQL数据库:流程控制语句loop.pptx

    2)掌握 ——LOOP语句的使用方法; LOOP语句 LOOP语句语法格式如下: [begin_label:] LOOP statement_list END LOOP [end_label] 说明:LOOP允许某特定语句或语句群的重复执行,实现一个简单的循环构造,statement_...

    mysql 存储过程应用(代码详解)

    详细介绍了mysql使用临时表实现强大的存储过程,怎样获得存储过程的返回值,使用了临时表,游标等方法。

    不能在存储过程中使用的语句

    虽然在设计存储过程中,可以包含任意数据和类型的T-SQL语句,但是以上所列的语句在设计存储过程中不能使用。

    Linux declare命令用法详解

    declare为shell指令,在第一种语法中可用来声明变量并设置变量的属性([rix]即为变量的属性),在第二种语法中可用来显示shell函数。若不加上任何参数,则会显示全部的shell变量与函数(与执行set指令的效果相同)。 ...

    MySQL游标概念与用法详解

    本文实例讲述了MySQL游标概念与用法。分享给大家供大家参考,具体如下: 1、游标的概念(Cursor) 一条sql,对应N条资源,取出资源的接口,就是游标,沿着游标,可以一次取出1行。如果开发过安卓的同学应该知道有一...

    Shell脚本中执行sql语句操作mysql的5种方法

    主要介绍了Shell脚本中执行sql语句操作mysql的5种方法,本文讲解了将SQL语句直接嵌入到shell脚本文件中、命令行调用单独的SQL文件、使用管道符调用SQL文件等方法,需要的朋友可以参考下

    MySQL 5.1中文手冊

    10.2. MySQL中的字符集和校对 10.3. 确定默认字符集和校对 10.3.1. 服务器字符集和校对 10.3.2. 数据库字符集和校对 10.3.3. 表字符集和校对 10.3.4. 列字符集和校对 10.3.5. 字符集和校对分配示例 10.3.6. 连接字符...

    MySQL存储过程中使用WHILE循环语句的方法

    本文实例讲述了MySQL存储过程中使用WHILE循环语句的方法。分享给大家供大家参考。具体如下: mysql> mysql> delimiter $$ mysql> mysql> CREATE PROCEDURE myProc() -> BEGIN -> -> DECLARE i int; -> SET i=1;...

    MySQL数据库:流程控制语句repeat.pptx

    2)掌握 —— REPEAT语句的使用方法; REPEAT语句 REPEAT语句格式如下: [begin_label:] REPEAT statement_list UNTIL search_condition END REPEAT [end_label] 说明:REPEAT语句首先执行statement_list中的语句,...

    T-SQL之DECLARE,SET,PRINT语句

    1.DECLARE语句 DECLARE语句是数据声明语句,主要作用是声明局部变量、函数、存储过程或游标变量等; 基本语法格式: DECLARE { { @local_variable [AS] data_type } | [= value] } [,…n] @local_variable即变量的...

    浅谈MySQL存储过程中declare和set定义变量的区别

    下面小编就为大家带来一篇浅谈MySQL存储过程中declare和set定义变量的区别。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧

    MySQL 5.1官方简体中文参考手册

    10.2. MySQL中的字符集和校对 10.3. 确定默认字符集和校对 10.3.1. 服务器字符集和校对 10.3.2. 数据库字符集和校对 10.3.3. 表字符集和校对 10.3.4. 列字符集和校对 10.3.5. 字符集和校对分配示例 10.3.6. 连接字符...

    经典SQL语句详解清晰的学习思路

    语句部分是Mssql语句,不可以在access中使用。  SQL分类:  DDL—数据定义语言(CREATE,ALTER,DROP,DECLARE)  DML—数据操纵语言(SELECT,DELETE,UPDATE,INSERT)  DCL—数据控制语言(GRANT,REVOKE,...

    mysql5.1中文手册

    MySQL中的字符集和校对 10.3. 确定默认字符集和校对 10.3.1. 服务器字符集和校对 10.3.2. 数据库字符集和校对 10.3.3. 表字符集和校对 10.3.4. 列字符集和校对 10.3.5. 字符集和校对分配示例 ...

    MYSQL中文手册

    10.2. MySQL中的字符集和校对 10.3. 确定默认字符集和校对 10.3.1. 服务器字符集和校对 10.3.2. 数据库字符集和校对 10.3.3. 表字符集和校对 10.3.4. 列字符集和校对 10.3.5. 字符集和校对分配示例 10.3.6. ...

    SQLserver中的declare变量用法

    SQL中的declare用法 平时写SQL查询、存储过程都是凭着感觉来,没有探究过SQL的具体语法,一直都是按c#那一套往SQL上模仿,前几天项目中碰到一个问题引起了我对declare定义变量的作用域的兴趣。 大家都知道c#中的局部...

Global site tag (gtag.js) - Google Analytics