zoukankan      html  css  js  c++  java
  • 存储过程2

    MYSQL存储过程中的参数主要有局部参数和会话参数两种,又称局部变量和会话变量。

    局部标量只在定义该局部变量的begin...end范围内有效,会话变量在整个存储过程范围内均有效。

    1.局部变量

    局部变量以关键字declare声明,后跟变量名和变量类型,例:

    declare a int

    在声明局部变量时,也可用关键字default 为变量指定默认值,未设置时默认值为NULL。例:

    declare a int default 10

     

    例局部变量与存储过程:

    delimiter//

    create procedure pl()

    begin

    declare x char(10) default 'outer';

    begin

    declare x char(10) default 'inner';

    seclect x;

    end;

    select x;

    end

    //

    调用存储过程call pl()//

    第一次x值为inner,第二次x值为outer。

     

    2.全局变量

    MYsql中会话变量不必声明即可使用,并在整个存储过程中都有效,会话变量名以字符‘@’作为

    起始字符。例:

    delimiter//

    create procedure p2()

    begin

    set @t=1;

    begin

    set @t=2;

    select @t;

    end;

    select @t;

    end 

    //

    调用该存储过程call p2()//

    两次@t的值均为2.

     

    MYSQL中使用set关键字为变量赋值:

    set var_name=expr[,var_name=expr]...

    另一种赋值语句为:

    select col_name[,...] into var_name[,...] from table_name where condition

    表示将查询结果赋值给变量var_name.

     

    光标的运用

    通过MYSQL查询数据库,其结果可能为多条记录。在存储过程和函数中使用光标可以实现逐条读取

    结果集中的记录。光标使用包括声明光标(declare cursor)、打开光标(open cursor)、使用

    光标(fetch cursor)和关闭光标(close cursor)。光标声明必须在处理程序之前,且声明在变量和

    条件之后。

     

    1.声明光标

    declare cursor_name cursor for select_statement

    其中 cursor_name是光标的名称。select_statement是一个select语句,返回一行或多行数据。

    其中这个语句也可以在存储过程中定义多个光标,但是必须保证每个光标名称的唯一性。例:

    declare info_of_student cursor for select 

    sid,name,age,sex,age from studentinfo

    where sid= 1;

    这里的select 子句不能包含into子句,并且光标只能在存储过程或存储函数中使用,上述代码

    不能单独执行。

    打开光标open cursor_name ,

    在一个程序中,一个光标可以被打开多次。由于可能在用户打

    开光标后,其他用户或程序正在更新数据表,可能导致用户在每次打开光标后,显示的结果都

    不同。

     

    使用光标

    光标在打开后可使用:fetch cursor_name into var_name[,var_name]...

    其中cursor_name 代表已经打开的光标的名称;var_name参数表示将光标中的select语句

    查询出来的信息存入该参数中。var_name 是存放数据的变量名,必须在声明光标前定义好。

    fetch...into 语句与select...into语句具有相同的意义。

    将已打开的光标info_of_student中select 语句查询出来的信息存入tmp_name和tmp_tel中。

    其中tmp_name和tmp_tel必须在使用前定义。其代码如下:

    fetch info_of_student into tmp_name,tmp_tel;

     

    关闭光标

    光标使用完毕后要及时关闭。对于已关闭的光标,不能再使用fetch来使用。

    close cursor_name

  • 相关阅读:
    目前阻碍大数据成功的常见问题有哪些
    YII2 的授权(Authorization)
    CCBPM工作流引擎的消息机制与设计
    日志框架实现实时改动,实时生效,详细框架思路(2)
    manacher hihoCoder1032 最长回文子串
    C#.NEt-GDI+中的Pen測试
    Unity3D游戏开发最佳实践20技巧(一)
    Android init.rc文件浅析
    OBIEE开发手冊
    Android Jni层 创建 linux socket 出错问题解决
  • 原文地址:https://www.cnblogs.com/Ting-light/p/9548510.html
Copyright © 2011-2022 走看看