zoukankan      html  css  js  c++  java
  • 6.mysql存储过程

    存储过程

    1、命令

    创建及调用

    定义分隔符
    	DELIMITER $
    创建存储过程
        delimiter $$
        create procedure 名称()
          begin
            语句
          end$$
        delimiter ;
    
    调用存储过程
    call 名称();
    

    查看存储过程

    show procedure status where db='';
    show create procedure pro_name;
    

    删除存储过程

    drop procedure pro_name;
    

    2、参数

    in
    	create procedure getname(in  name  varchar(100) default 'stone')
    out
    	create procedure getsalary(in  n  varchar(100), out sla int)
    	call getsalary(‘stone’,@s)
    	select @s;
    inout
    	结合了输入输出的功能,尽量少用
    

    3、存储过程语句

    IF语句

    IF expression THEN
        statements;
    END IF;
    
    IF expression THEN
        statements;
    ELSE
        else-statements
    END IF;
    

    CASE语句

    CASE
    WHEN [condition1]
    THEN [result1]
    ……
    WHEN [conditionn]
    THEN [resultn]
    ELSE result(n+1)
    END;
    

    WHILE语句

    先检验条件,再执行循环体
    
    while 条件 do
    
    --循环体;
    
    end while;
    

    repeat语句

    先执行一遍循环体,再检验条件
    
    repeat 
    
    --循环体;
    
    until 循环条件 
    
    end repeat;
    

    4、自定义函数

    CREATE FUNCTION 函数(参数 类型,[参数 类型,...])
    RETURNS 返回类型
    BEGIN
    return 
    END;
    

    5、储存过程和函数的区别

    1、存储过程可以有多个in,out,inout参数,而函数只有输入参数类型,而且不能带in
    2、存储过程实现的功能要复杂一些;而函数的单一功能性(针对性)更强。
    3、存储过程可以返回多个值;存储函数只能有一个返回值。
    4、存储过程一般独立的来执行;而存储函数可以作为其它sql语句的组成部分来出现。
    5、存储过程可以调用存储函数。函数不能调用存储过程。

    6、实例

    delimiter $$
    create procedure insert_c(num int)
    begin
    
    declare ran_name varchar(100) default 'QWERTYUIOPASDFFGHJKLZXVCBNMqazwsxedcrfvtgbyhnujmikolp';
    declare ran_age int;
    declare name varchar(50) default '';
    declare i int default 0;
    declare j int default 0;
    
    start transaction;
    while  i < num  do
    set ran_age = floor(rand()*100);
        while j < 20 do
        set name = concat(name,substring(ran_name,floor(1+rand()*53),1));
        set j=j+1;
        end while;
    
    insert into course(cname,age) values(name,ran_age);
    set i = i+1;
    set name = '';
    set j = 0;
    end while;
    commit;
    
    end$$
    delimiter ;
    
  • 相关阅读:
    ll command not found 当ll无法识别的解决办法
    idea控制台全屏
    查看centos版本号
    java Error: 无法访问org.apache.http.annotation.ThreadSafe 找不到org.apache.http.annotation.ThreadSafe的类文件
    DigestUtils.md5Hex()加密
    JAVA 8 '::' 关键字
    CVE-2020-1472 NetLogon特权提升漏洞
    OpenSSH的scp命令注入漏洞(CVE-2020-15778)
    redis未授权访问漏洞&简单利用&总结
    常见web信息泄露
  • 原文地址:https://www.cnblogs.com/unsigned1995/p/14154184.html
Copyright © 2011-2022 走看看