参数和复合语句

CREATE PROCEDURE p5 ([
    [ IN | OUT | INOUT ] name1 data-type ,
    ...                                                       ,
    [ IN | OUT | INOUT ] nameN data-type
]) ... 

  参数列表可以为空,也可以有多个,关键词IN | OUT | INOUT,可省略,默认IN.

1. IN 输入的例子

mysql> CREATE PROCEDURE p5(p INT)
    SET @x = p //
mysql> CALL p5(12345)//
mysql> SELECT @x//

  上面代码执行后会显示输入的12345.过程体内将参数p的值赋值给会话变量x,然后调用过程并传递12345给参数p,调用完毕后显示会话变量@x.

  说明变量名前加@表示为会话变量,作用域为整个用户的会话周期.不加@表示用户自定义的局部变量.关于会话变量:

  1) 可以先在用户变量中保存值然后在以后引用它;这样可以将值从一个语句传递到另一个语句。

  2) 用户变量与连接有关,即一个客户端定义的变量不能被其它客户端看到或使用。当客户端退出时,该客户端连接的所有变量将自动释放。

  3) 用户变量的形式为@var_name,其中变量名var_name可以由当前字符集的文字数字字符、‘.’、‘_’和‘$’组成。 默认字符集是cp1252 (Latin1)。可以用mysqld的default-character-set选项更改字符集。

  4) 用户变量名对大小写不敏感。
  5) 设置用户变量的一个途径是执行SET语句:

SET @var_name = expr [, @var_name = expr] ...

    对于SET,可以使用=或:=作为分配符。分配给每个变量的expr可以为整数、实数、字符串或者NULL值。

    也可以用语句代替SET来为用户变量分配一个值。在这种情况下,分配符必须为:=而不能用=,因为在非SET语句中=被视为一个比较 操作符:

mysql> SET @t1=0, @t2=0, @t3=0;
mysql> SELECT @t1:=(@t2:=1)+@t3:=4,@t1,@t2,@t3;

+-------------------------------+------+------+------+

| @t1:=(@t2:=1)[email protected]:=4  | @t1 | @t2  | @t3 |

+-------------------------------+------+------+------+

|          5                           |    5  |    1   |    4  |

+-------------------------------+------+------+------+

  6) 用户变量可以用于表达式中。目前不包括明显需要文字值的上下文中,例如SELECT语句的LIMIT子句,或者LOAD DATA语句的IGNORE number LINES子句。

  7) 如果使用没有初始化的变量,其值是NULL。

2. OUT 输出的例子

mysql > CREATE PROCEDURE p6 (OUT p INT)
         -> SET p = -5 //
mysql> CALL p6(@y) //
mysql> SELECT @y //  

  本例中,p是输出参数,调用过程将p的值传入会话变量@y中.

3. 复合语句

CREATE PROCEDURE p7 ()
BEGIN
    SET @a = 5;
    SET @b = 5;
    INSERT INTO t VALUES (@a);
    SELECT s1 * @a FROM t WHERE s1 >= @b;
END; //   /* 这个语句将不会被调用*/ 

  复合语句一般由BEGIN/END块包括.可以用块去封装多条语句,完成一些sql语句进行变量定义和流程控制等.

  

时间: 2024-11-08 04:50:44

参数和复合语句的相关文章

C语言LL(1)文法

<程序> -〉 <外部声明> | <函数定义><外部声明> -〉<头文件> | <变量> | <结构体> <头文件> -〉 #include<文件名><文件名> -〉 stdio.h丨stdlib.h丨string.h<结构体> -〉 <结构体声明〉|<变量><结构体声明> -〉 struct<标识符><函数定义> -〉

C程序语法(无左递归)

C程序语法(无左递归) <程序> -〉 <外部声明> | <函数定义><外部声明> -〉<头文件> | <变量> | <结构体> <头文件> -〉 #include<文件名><文件名> -〉 stdio.h丨stdlib.h丨string.h<结构体> -〉 <结构体声明〉|<变量><结构体声明> -〉 struct<标识符><

消除左递归c语言文法

<程序> -〉 <外部声明> | <函数定义><外部声明> -〉<头文件> | <变量> | <结构体> <头文件> -〉 #include<文件名><文件名> -〉 stdio.h丨stdlib.h丨string.h<结构体> -〉 <结构体声明〉|<变量><结构体声明> -〉 struct<标识符><函数定义> -〉

简易c语言文法

<程序>→<外部声明>|<程序><外部声明> <外部声明>→<函数定义>|<声明> <函数定义>→<类型说明><声明符><符合语句> <类型说明>→<void>|<char>|<int>|<float> <声明符>→<指针直接声明符>|<直接声明符> <指针>→<

语言文法

<程序>--><外部声明>|<程序 外部声明> <外部声明>à<函数定义>|<定义> <函数定义>à<类型 复合语句> <类型>à<无字符>|<字符型>|<整形>|<浮点型> <声明符>à<指针直接声明符>|<直接声明符> <指针>à< ’ *’ >|< ’* ’指针> &l

文法分析与递归下降分析

C语言程序--〉main函数,调用数据库|函数声明|函数定义 Main函数--〉函数定义变量|调用函数 函数声明--〉函数名.参数.函数类型 定义变量--〉函数类型 函数类型--〉void| CHAR| INT| FLOAT 定义--〉定义变量|调用函数 参数--〉参数类型.参数名 参数类型--〉void| CHAR| INT| FLOAT 易c语言文法 <程序> -〉 <外部声明> | <函数定义> <外部声明> -〉<头文件> | <变

语言文法(待续)

<程序>--><外部声明>|<程序 外部声明> <外部声明>à<函数定义>|<定义> <函数定义>à<类型 复合语句> <类型>à<无字符>|<字符型>|<整形>|<浮点型> <声明符>à<指针直接声明符>|<直接声明符> <指针>à< ’ *’ >|< ’* ’指针> &l

C语言简易文法(无左递归)

<程序> -〉 <外部声明> | <函数定义><外部声明> -〉<头文件> | <变量> | <结构体> <头文件> -〉 #include<文件名><文件名> -〉 stdio.h丨stdlib.h丨string.h<结构体> -〉 <结构体声明〉|<变量><结构体声明> -〉 struct<标识符><函数定义> -〉

简单c语言文法

<源函数> → <外部声明> | <源程序> <外部声明> <程序> -〉 <外部声明> | <函数定义><外部声明> -〉<头文件> | <变量> | <结构体> <头文件> -〉 #include<文件名><文件名> -〉 stdio.h丨stdlib.h丨string.h<结构体> -〉 <结构体声明〉|<结构