• mysql——定义——存储过程和函数——概念


    存储过程和函数是指将经常使用的一组SQL语句组合在一起,并将这些SQL语句当作一个整体存储在服务器中
    
    
    
    一、创建存储过程
    
    
    语法格式:
    
    create procedure sp_name ( [ proc_parameter[……] ] )
    
       [ characteristic…… ] routine_body
    
    
    sp_name:存储过程的名称;
    
    proc_parameter:存储过程的参数列表;
    
    characteristic:指定存储过程的特性;
    
    routine_body:是SQL代码的内容。
    
    
    注意:可以用begin……end来标志SQL代码的开始和结束。
    
    -------------------------------------------------------------------------
    
    proc_parameter:存储过程的参数列表;
    
    proc_parameter中的每一个参数由3个部分组成。这3部分分别是  输入输出类型、参数名称、参数类型。
    
    
    形式如下:
    
    
    [ IN | OUT | INOUT ]  param_name type
    
    
    IN:表示输出参数;
    
    OUT:表示输出参数;
    
    INOUT:表示既可以是输入,也可以是输出;
    
    
    
    param_name:表示存储过程的参数名称;
    
    
    type:指定存储过程的参数类型,该类型可以是mysql数据库的任意数据类型;
    
    ------------------------------------------------------------------------
    ------------------------------------------------------------------------
    
    characteristic:指定存储过程的特性;
    
    
    characteristic参数有多个取值。说明如下:
    
    
    
    LANGUAGE SQL:说明routine_body部分是由SQL语言的语句组成,这也是数据库系统的默认的语言;
    
    
    +++++++++++++++++++
    
    
    [ NOT ] DETERMINISTIC:指明存储过程的执行结果是否是确定的。
    
    
            DETERMINISTIC表示结果是确定的。每次执行存储过程时,相同的输入会得到相同的输出。
    
    
            NOT DETERMINISTIC表示结果是非确定的,相同的输入可能得到不同的输出。
    
    
            默认情况下,结果是非确定的,
    
    
    ++++++++++++++++++++++++
    
    
    { CONTAINS SQL | NO SQL | READS SQL DATA | MODIFIES SQL DATE }:指明子程序使用SQL语句的限制。
    
    
    CONTAINS SQL:表示子程序包含SQL语句,但不包含读或写数据的语句;
    
    NO SQL:表示子程序中不包含SQL语句;
    
    READS SQL DATA:表示子程序中包含读数据的语句;
    
    MODIFIES SQL DATE:表示子程序中包含写数据的语句。
    
    
    默认情况下:系统会自定为:CONTAINS SQL
    
    
    +++++++++++++++++++
    
    
    SQL SECURITY { DEFINER | INVOKER }:指明谁有权限来执行。
    
    DEFINER:表示只有定义者自己才能执行;
    
    INVOKER:表示调用者可以执行;
    
    
    默认情况下,系统指定的权限是DEFINER
    
    ++++++++++++++++++++++++++++++++++++++++++
    
    COMMENT'string':注释信息
    
    
    
    ------------------------------------------------------------------------
    ------------------------------------------------------------------------
    
    
    
    注意:创建存储过程时,系统默认指定CONTAINS SQL,表示存储过程中使用了SQL语句。但是如果存储过程中没有使用SQL语句;
    
          最好设置为NO SQL。而且,存储过程中,最好在COMMENT部分对存储过程进行简单注释。
    
    ===========================================================================================
    ===========================================================================================
    ===========================================================================================
    
    举例:
    
    
    create procedure num_from_employee( IN emp_id INT,OUT count_num INT )
    
    reads sql date
    
    begin
    
           select count(*) into count_num from employee where d_id = emp_id;
    
    end
    
    
    
    具体执行程序:
    
    delimiter&&
    
    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 &&
    
    delimiter ;
    
    
    
    
    二 创建存储函数
    
    语法格式:
    
    create function sp_name ( [func_parameter[,……]] )
    
    returns type
    
    [ characteristic……] routine_body
    
    
    
    sp_name:存储函数的名称;
    
    
    func_parameter:存储函数的参数列表;
    
    
    returns type:指定返回值的类型;
    
    
    characteristic:指定存储函数的特性,该参数的取值和存储过程的取值一样的;
    
    
    routine_body:是SQL代码的内容,可以用BEGIN……END来标志SQL代码的开始和结束。
    
    
    
    =================================================================================
    
    举例:
    
    create function name_from_employee ( emp_id int )
    
    returns varchar(20)
    
    begin
    
         return ( select name from employee where num = emp_id );
    
    end
    
    
    具体执行程序:
    
    delimiter &&
    
    create function name_from_employee ( emp_id int )
    
    returns varchar(20)
    
    begin
    
         return ( select name from employee where num = emp_id );
    
    end &&
    
    delimiter;


    PS:注意:MYSql中默认的语句结束符号为分号 ; 存储过程中的SQL语句需要分号来结束。为了避免冲突,首先用DELIMITER&& 将mysql的结束符号设置为&&,最后再改过来。
    存储函数也是一样。
  • 相关阅读:
    开源一个适用iOS的数据库表结构更新机制的代码
    耗油是什么??主要起什么作用???_百度知道
    跨平台C++ 功能全面的Socket类库,支持TCP,UDP,限速等等_陈华_新浪博客
    ASICME Avalon|阿瓦隆比特币矿机
    水淀粉_百度百科
    HyperDex.org
    不忘初心:从阿里运维工程师到水果贩子的“降级”路 | 卖水果的工程师
    用Github账号领Ripple币
    简洁 轻快 完美支持 Windows 8 Modern UI 单行输入,轻盈流畅
    赴美旅游签证,不求人!
  • 原文地址:https://www.cnblogs.com/xiaobaibailongma/p/12097636.html
Copyright © 2020-2023  润新知