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

  • 相关阅读:
    python 包管理工具 pip 的配置
    Python 变量作用域 LEGB (下)—— Enclosing function locals
    Python 变量作用域 LEGB (上)—— Local,Global,Builtin
    2020 Java 面试题 小结 (答案慢慢补上,有错误请指出)
    mysql 根据日期(date)做年,月,日分组统计查询
    jvm指令
    正则表达式 分割地址 获取省市区详细地址
    .Net 异常记录
    WCF设计服务协议(一)
    plsql ORA-01789:查询块具有不正确的结果列数
  • 原文地址:https://www.cnblogs.com/Ting-light/p/9548510.html
Copyright © 2011-2022 走看看