zoukankan      html  css  js  c++  java
  • 存储过程和存储函数

    grade表:

    select * from grade;
    +----+------+--------+------+-------+-------+
    | id | name | sexy   | age  | score | class |
    +----+------+--------+------+-------+-------+
    |  1 | a    | male   |   15 |    90 | A(1)  |
    |  2 | b    | male   |   13 |    97 | A(1)  |
    |  3 | c    | female |   15 |    79 | A(2)  |
    |  4 | a    | female |   13 |   100 | B(1)  |
    |  5 | d    | male   |   16 |    89 | B(2)  |
    |  6 | e    | male   |   16 |    97 | B(2)  |
    |  7 | f    | female |   15 |    93 | B(3)  |
    |  8 | g    | female |   13 |    88 | C(1)  |
    |  9 | h    | male   |   14 |    91 | C(2)  |
    +----+------+--------+------+-------+-------+

     创建存储过程p_grade

    delimiter &&
    create procedure p_grade(in g_id int,out g_name varchar(20))
    begin
    declare g_score varchar(20);
    select score into g_score from grade where id = g_id;
    select name into g_name from grade where id = g_id;
    select g_score;
    end
    &&
    delimiter ;
    call p_grade(1,@n);
    +---------+
    | g_score |
    +---------+
    | 90      |
    +---------+
    select @n;
    +------+
    | @n   |
    +------+
    | a    |
    +------+

    1.参数g_name的作用范围是begin...end之间

    2.declare声明的变量作用范围是begin...end之间

    3.declare必须在所有set前面,即使是变量g_name,也必须在所有declare之后赋值。

    4.declare可以声明多个变量,但是多个变量的类型必须一致。

      正确语法:declare a,b,c int default 10;

      错误语法: declare a int,b int,c int;

    5.sql语句中为了给g_score和g_name赋值,使用了两条select语句。简洁写法如下

       select score,name into g_score,g_name from grade where id = g_id;

    创建存储函数f_grade

    delimiter &&
    create function f_grade(g_id int)
    returns varchar(20)
    begin
    declare g_name varchar(20) default '';
    select name into g_name from grade where id = g_id;
    return g_name;
    end
    &&
    delimiter ;
    select f_grade(1);
    +------------+
    | f_grade(1) |
    +------------+
    | a          |
    +------------+

    1.存储函数的参数列表没有In,out或者inout关键字,所有参数都为输入参数

    2.必须有返回值

      returns 返回类型

    这和高级编程语言函数返回空值void是有区别的

    返回类型后面不能有分号,分号只能出现在begin...end之间

    3.begin...end之间必须有return ***。一般放在end之前,理由同高级编程语言函数中return的位置

    4.存储函数bein...end之间不能有select输出

    创建存储过程p_grade3 

    delimiter &&
    create procedure p_grade3(in c_score int)
    comment 'index g_score'
    begin
    declare cmp tinyint;
    declare count int;
    declare g_score int;
    declare cur_score cursor for select score from grade;
    select count(*) into count from grade;
    open cur_score;
    while count > 0 do
    fetch cur_score into g_score;
    select g_score;
    insert into test (score) values (g_score);
    set count = count - 1;
    end while;
    close cur_score;
    end
    &&
    delimiter ;

    存储过程中循环输出了游标里面的所有记录

    定义条件和处理程序

    delimiter &&
    create procedure p_grade2()
    begin
    declare duplicate_entry condition for sqlstate '23000';
    declare continue handler for duplicate_entry set @message = 'duplicate_entry';
    set @count = 1;
    insert into grade (id) values (9);
    set @count = @count + 1;
    end
    &&
    delimiter ;

    1.grade表id字段是自增主键,不允许重复插入相同值

    2.sqlstate或者mysql_error_code可以通过事先insert into grade (id) values (9);根据控制台的错误信息得到

    ERROR 1062 (23000): Duplicate entry '9' for key 'PRIMARY'

    3.处理程序中

    set @message = 'duplicate_entry'

    该段语句是发生错误时的处理代码,必须和handler for在同一行

    4.在执行 

      insert into grade (id) values (9);

    如果没有发生错误,那么继续执行后面的set @count = @count + 1;

    如果发生了错误,由于处理程序的handle_type是continue,那么仍然继续执行后续语句,当前插入失败,并且处理程序的处理语句 set @message  = 'duplicate_entry'被执行;

     

     

      

     

  • 相关阅读:
    Power BI 根据用户权限动态生成导航跳转目标
    Power BI Tooltips 增强功能
    Power BI refresh error “could not load file or assembly…provided impersonation level is invalid”
    SQL 错误代码 18456
    如何使用SQL Server Integration Services从多个Excel文件读取数据
    通过表格编辑器将现有表引入Power BI数据流
    Power BI 中动态增长的柱状图
    ambari2.7.3离线安装hdp3.1.0时,ambari-hdp-1.repo中baseurl无值
    ambari 安装 cannot download file mysql-connector-java from http://8080/resource/mysql-connector-java.jar
    洛谷P4180 [BJWC2010]严格次小生成树
  • 原文地址:https://www.cnblogs.com/bibiafa/p/9328282.html
Copyright © 2011-2022 走看看