美文网首页工作日志
简单的存储过程

简单的存储过程

作者: 啊哈JC熙 | 来源:发表于2018-05-30 17:21 被阅读10次

存储过程

参考资料:https://www.cnblogs.com/mark-chan/p/5384139.html

存储过程(Stored Procedure)是一组为了完成特定功能的SQL语句集,经编译后存储在数据库中,用户通过指定存储过程的名字并给定参数(如果该存储过程带有参数)来调用执行它。

使用CALL语句来调用存储过程

#存储过程IN参数
DELIMITER //
  CREATE PROCEDURE procedure_in_param(IN p_in FLOAT)
    BEGIN
    SELECT p_in;
    SET p_in=2;
    SELECT p_in;
    END;
    //
DELIMITER ;
#调用
SET @p_in=5.1;
CALL procedure_in_param(@p_in);
SELECT @p_in;

USE iris_data

SELECT sepal_length from iris WHERE sepal_length >= 3;
select target,count(target) from iris group by target;

# // 要必须加
DELIMITER //
    CREATE PROCEDURE procedure_target(IN set_target VARCHAR(100))
        BEGIN

        IF set_target = "setosa" THEN
            SELECT * FROM iris WHERE target=set_target;
        ELSEIF set_target = "123" THEN
            SET set_target = "123+++";
            SELECT set_target;
        ELSE
            SELECT set_target;
        END IF;

        END
        //
DELIMITER ;

DROP PROCEDURE procedure_target;

SET @set_ta="setosa";
CALL procedure_target(@set_ta);
CALL procedure_target("123")
CALL procedure_target("13432")

SELECT * FROM iris WHERE target="setosa";

#  让存储过程输出结果
DELIMITER //
    CREATE PROCEDURE procedure_target1(IN set_target VARCHAR(100))
        BEGIN
            SELECT * FROM iris WHERE target=set_target;
        END
        //
DELIMITER ;
SET @set_ta1="versicolor";
CALL procedure_target1(@set_ta1);

事务 回滚

主要用于处理操作量大,复杂度高的数据。
BEGIN 开始一个事务
ROLLBACK 事务回滚
COMMIT 事务确认


游标

# ********************************** 游标 *****************************************
# cursor 游标 存放SQL语句执行的结果
# 分离select结果
# 在数据量大的情况下,是不适用的,速度过慢
# 使用场景:从表中循环判断并得到想要的结果集
# delimiter 定界符

DROP PROCEDURE if EXISTS cursor_test;
delimiter //
create procedure cursor_test()
BEGIN
    -- 声明变量
    declare sepal_length FLOAT;
    declare sepal_width FLOAT;
    declare petal_length FLOAT;
    declare petal_width FLOAT;
    declare target VARCHAR(100);

    -- 1.定义一个游标
    declare cursor1 cursor for SELECT * from `iris`;

    -- 2.打开游标
    open cursor1;

    -- 3.使用游标获取列的值
    fetch next from cursor1 into sepal_length,sepal_width,petal_length,petal_width,target;

    -- 4.显示结果
    SELECT sepal_length,sepal_width,petal_length,petal_width,target;

    -- 5.关闭游标
    CLOSE cursor1;
END;
//
delimiter

CALL cursor_test()



# *********** 循环读取 *********** 

DROP PROCEDURE if EXISTS cursor_test1;
delimiter //
create procedure cursor_test1()
BEGIN
    -- 声明变量
    declare sepal_length FLOAT;
    declare sepal_width FLOAT;
    declare petal_length FLOAT;
    declare petal_width FLOAT;
    declare target VARCHAR(100);
    declare done varchar(20) default '';

    -- 1.定义一个游标
    declare cursor2 cursor for SELECT * from `iris`;
    -- 声明一个越界标识done:continue当not found之后,还会继续执行一次select语句
  -- SQLSTATE '02000' 是游标到最后一行之后没有发现数据,表中select可能也没有查询打开数据
    declare CONTINUE HANDLER FOR SQLSTATE '02000' SET done = null;

    -- 2.打开游标
    open cursor2;

    -- 3.使用游标获取列的值
    fetch next from cursor2 into sepal_length,sepal_width,petal_length,petal_width,target;

    WHILE( done is not null ) DO
        -- 4.显示结果
        IF target = "A" THEN
            SELECT sepal_length,sepal_width,petal_length,petal_width,target;
        END IF;
        fetch next from cursor2 into sepal_length,sepal_width,petal_length,petal_width,target;
    END WHILE;

    -- 5.关闭游标
    CLOSE cursor2;
END;
//
delimiter

# 注意end while后面有;
CALL cursor_test1()

SELECT * from `iris`

相关文章

  • 简单的存储过程

    存储过程 参考资料:https://www.cnblogs.com/mark-chan/p/5384139.htm...

  • 17 存储过程

    过程: 函数: 过程是没有返回值的函数 存储过程: 存储过程语法 存储过程1--创建简单的存储过程 存储过程2--...

  • Oracle存储过程总结

    Oracle存储过程总结 1.存储过程结构 1.1 第一个存储过程 上面就是一个最简单的存储过程。一个存储过程大体...

  • Oracle存储过程基本结构说明

    1.存储过程结构 1.1第一个存储过程 上面是一个简单的存储过程实例.一个存储过程大体分为这么几个部分: 存储过程...

  • mysql的存储过程及其使用场景,和存储函数的区别

    简单了解什么是存储过程,以及存储过程的使用场景,和存储函数、触发气的区别: 存储过程,存储函数,触发器和事件是自从...

  • SQL必知必会(存储过程)

    一、什么是存储过程,如何创建一个存储过程 存储过程的英文是 Stored Procedure。它的思想很简单,就是...

  • Oracle存储过程使用技巧与经验总结

    oracle存储过程常用技巧 我们在进行pl/sql编程时打交道最多的就是存储过程了。存储过程的结构是非常的简单的...

  • 1.存储过程初探

    先来看一个简单的存储过程 其构成: 创建语句:create or replace procedure 存储过程名 ...

  • 简单的存储过程游标使用

    create procedure dbo.GetCountByName--存储过程名字 @Name varchar...

  • oracle存储过程常用技巧

    我们在进行pl/sql编程时打交道最多的就是存储过程了。存储过程的结构是非常的简单的,我们在这里除了学习存储过程的...

网友评论

    本文标题:简单的存储过程

    本文链接:https://www.haomeiwen.com/subject/dogtsftx.html