• 第十章 存储过程和函数


    创建存储过程和函数

    创建存储过程

    create procedure sp_name ([proc_parameter[...]])

    [characteristic ...] routine_body

       

    "sp_name"是参数存储过程名称

    "proc_parameter"存储过程的参数列表

    "characteristic"存储过程的特性

    "routine_body"是SQL代码内容,可以用begin...end标志

       

    proc_parameter的每个参数由三个部分构成:输入输出类型、参数名、参数类型

    形式:[in|out|inout] param_name type

       

    characteristic参数有多个取值:

    language sql:说明routine_body部分由sql语言的语句组成

    [not] deterministic:指明存储过程的执行结果是否是确定的。(相同输入得到相同输出,便是确定的)

    {contains sql|no sql|reads sql data|modifies sql data}:指明子程序使用sql语句的限制。

    contains sql表示子程序包含sql语句,但不包含读或写数据的语句(默认)

    no sql表示子程序中不包含sql语句

    reads sql data表示子程序包含读数据的语句

    modifies sql data表示子程序中包含写数据的语句

    mysql> delimiter &&

    mysql> create procedure num_from_employee(in emp_id int,out count_num int)

    -> reads sql data

    -> begin

    -> select count(*) into count_num

    -> from employee

    -> where d_id=emp_id;

    -> end &&

       

    创建存储函数

    形式如下:

    create function sp_name ([func_parameter[...]])

    return type

    [characteristic...] routine_body

    参数意义参照上一个

       

    mysql> delimiter &&

    mysql> create function name_from_employee(emp_id int)

    -> returns varchar(20)

    -> begin

    -> return (select name from employee where num=emp_id);

    -> end &&

       

    变量的使用

    存储过程和函数中可以定义和使用变量。这些变量的作用范围是begin...end程序段中。

    a.定义变量

    declare var_name[,...] type [default value]

       

    b.变量赋值

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

       

    还可以使用select ... into语句为变量赋值

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

    col_name 参数表示查询字段名称,var_name是变量名称

       

    定义条件和处理程序

    定义条件和处理程序是事先定义程序执行过程中可能遇到的问题,并且可以在处理程序中定义解决这些问题的办法。通过declare关键字来定义

       

    a.定义条件

    MySQL中可以使用declare关键字来定义条件。语法如下:

    declare condition_name condition for condition_value

    condition_value:

    sqlstate [value] sqlstate_value | mysql_error_code

       

    b.定义处理程序

    declare hander_type handler for condition_value[,...] sp_statement

    hander_type:

    continue|exit|undo

    condition_value:

    sqlstate[value] sqlstate_value|condition_name|sqlwarning

    |not found|sqlexception|mysql_error_code

       

       

    光标的使用

    a.声明关标

    declare cursor_name cursor for select_statement;

    b.打开光标

    open cursor_name;

    c.使用光标

    fetch cur_emloyee into var_name[,var_name...];

    d.关闭光标

    close cursor_name;

  • 相关阅读:
    内存溢出异常
    Java堆中的对象
    运行时数据区域
    字符串常量池
    自己编译JDK
    @PathVariable注解详解
    spring容器监听器
    redis和spring整合
    Redis安装、启动、关闭
    HDU3974 Assign the task
  • 原文地址:https://www.cnblogs.com/wuchaodzxx/p/5524980.html
Copyright © 2020-2023  润新知