存储过程 订阅
存储过程(Stored Procedure)是在大型数据库系统中,一组为了完成特定功能的SQL 语句集,它存储在数据库中,一次编译后永久有效,用户通过指定存储过程的名字并给出参数(如果该存储过程带有参数)来执行它。存储过程是数据库中的一个重要对象。在数据量特别庞大的情况下利用存储过程能达到倍速的效率提升 展开全文
存储过程(Stored Procedure)是在大型数据库系统中,一组为了完成特定功能的SQL 语句集,它存储在数据库中,一次编译后永久有效,用户通过指定存储过程的名字并给出参数(如果该存储过程带有参数)来执行它。存储过程是数据库中的一个重要对象。在数据量特别庞大的情况下利用存储过程能达到倍速的效率提升
信息
外文名
Stored Procedure
中文名
存储过程
存储过程格式
sql中的存储过程及相关介绍:CREATE PROCEDURE [拥有者.]存储过程名[;程序编号][(参数#1,…参数#1024)][WITH{RECOMPILE | ENCRYPTION | RECOMPILE, ENCRYPTION}][FOR REPLICATION]AS 程序行其中存储过程名不能超过128个字。每个存储过程中最多设定1024个参数(SQL Server 7.0以上版本),参数的使用方法如下:@参数名数据类型[VARYING] [=内定值] [OUTPUT]每个参数名前要有一个“@”符号,每一个存储过程的参数仅为该程序内部使用,参数的类型除了IMAGE外,其他SQL Server所支持的数据类型都可使用。[内定值]相当于我们在建立数据库时设定一个字段的默认值,这里是为这个参数设定默认值。[OUTPUT]是用来指定该参数是既有输入又有输出值的,也就是在调用了这个存储过程时,如果所指定的参数值是我们需要输入的参数,同时也需要在结果中输出的,则该项必须为OUTPUT,而如果只是做输出参数用,可以用CURSOR,同时在使用该参数时,必须指定VARYING和OUTPUT这两个语句。例子:例子说明:该例子是建立一个简单的存储过程order_tot_amt,这个存储过程根据用户输入的订单ID号码(@o_id),由订单明细表 (orderdetails)中计算该订单销售总额[单价(Unitprice)*数量(Quantity)],这一金额通过@p_tot这一参数输出给调用这一存储过程的程序。
收起全文
精华内容
参与话题
问答
  • Mysql 存储过程简介--实现存储过程

    万次阅读 多人点赞 2019-01-23 13:35:44
    什么是存储引擎: Mysql中的数据用各种不同的技术存储在文件(或者内存)中, 每一种技术都使用不同的存储机制, 索引技巧 锁定水平并且最 终提供广泛的不同的功能和能力。通过选择不同的额技术你能过够获得额外 ...

    什么是存储引擎:

    Mysql中的数据用各种不同的技术存储在文件(或者内存)中, 每一种技术都使用不同的存储机制,
    索引技巧 锁定水平并且最 终提供广泛的不同的功能和能力。通过选择不同的额技术你能过够获得额外 的速度或者功能从而改 善你的应用整体功能。不同的存储引擎性能是不一的你能够获得额外的速度或者功能,从而改善你的应用的整体功能。查看Mysql可用的引擎可以用:show engines查询出来后边有 yes 的 是支持的 no 是不支持的。

    2.Mysql 的常见引擎 :

    1.MEMORY:

    memory使用 存在内存中的内容来创建表,每个MEMORY表实际对应一个磁盘文件,格式是.frm(就是表里的结构)。memory类型的表访问速度非常快,因为它的数据放在内存中 并且默认使用 HASH索引,但是一旦服务器关闭 表中的数据就会丢失, 但是表还会继续存在。​

    2.MylSAM:

    拥有较高的插入(如 insert into 新增),查询速度,但不支持事物,也不支持外键。 每个MylSAM在磁盘上存放3个文件,其中文件名和表名相同,但是扩展名 分别为 .frm 存储表的一个定义 . MYD:存储真是的数据 .MYI:存储索引 MyISAM适合: (1)做很多count 的计算; (2)插入不频繁,查询非常频繁; (3)没有事务。

    3.InnoDB:

    5.5版本后Mysql的默认数据库,事物型数据库的首选引擎,支持ACID事物,支持行级锁定 innoDB写的处理效率差,他会占用空间来保存数据和索引。 InnoDB适合: (1)可靠性要求比较高,或者要求事务; (2)表更新和查询都相当的频繁,并且表锁定的机会比较大的情况指定数据引擎的创建 让所有的灵活性成为可能的开关是提供给ANSI SQL的MySQL扩展——TYPE参数。 MySQL能够让你在表格这一层指定数据库引擎,所以它们有时候也指的是table formats。 下面的示例代码表明了如何创建分别使用MyISAM、ISAM和HEAP引擎的表格。 下面的代码显示了如何使用ALTER TABLE把MyISAM表格移动到InnoDB的引擎: 代码:ALTER TABLE tblMyISAM CHANGE TYPE=InnoDB 3. Memory:所有数据置于内存的存储引擎,拥有的极高的插入,更新和查询效率。但是会占用和数据量成正比的内存空间。并且其内容会在 Mysql 重新启动时丢失。 4.Merge:将一定数量的 MyISAM 表联合而成一个整体,在超大规模数据存储时很有用。 5.Archive:非常适合存储大量的独立的,作为历史纪录的数据。因为它们不经常被读取。 Archive 拥有高效的插入速度,但其对查询的支持相对较差。 6.CSV:逻辑上由逗号分割数据的存储引擎。它会在数据库子目录里为每个数据表创建一个 .CSV文件这是一个普通的文本文件,每个数据行占用一个文本行。CSV存储引擎不支持索引。7.BlackHole:黑洞引擎,写入的任何数据都会消失,一般用于记录 binlog 做复制的中继。

    ACID:

    A 事务的原子性(Atomicity):指一个事务要么全部执行,要么不执行.也就是说一个事务不可能只执行 了一半就停止了.比如你从取款机取钱,这个事务可以分成两个步骤:1划卡,2出钱.不可能划了卡,而钱 却没出来.这两步必须同时完成.要么就不完成. C 事务的一致性(Consistency):指事务的运行并不改变数据库中数据的一致性.例如,完整性约束了 a+b=10,一个事务改变了a, 那么b也应该随之改变. I 独立性(Isolation):事务的独立性也有称作隔离性,是指两个以上的事务不会出现交错执行的状态. 因为这样可能会导致数据不一致. D 持久性(Durability):事务的持久性是指事务执行成功以后,该事务所对数据库所作的更改便是持久 的保存在数据库之中, 不会无缘无故的回滚.

    Innodb介绍:

    innoDB是一种可靠性高的高性能 Mysql 数据库存储引擎,它有如下优点:​
    1.它遵循ACID模式设计,具有与事物(Transactions),回滚和保护用户数据的崩溃恢复能力。 2.提供行锁。 3.InnoDB表基于主键在磁盘上安排数据,有优化的常见查询功能。每一个InnoDB表都有一个叫做 聚集索引的主键索引,能尽可能减少数据查询次数。 4.为了维护数据完整性,InnoDB还支持外键完整性约束。 5.可以与其它MySQL存储引擎混合使用InnoDB表。列如,能用一个结合操作在一个单独查询中综合源自 InnoDB和InnoDB表的数据 6.InnoDB是针对提高 CPU效率而设计的,并且在处理大数据时表现最佳。MyISAM和InnoDB的区别;

    什么是存储过程:

    一组可编程的函数,是为完成 特定 功能的SQL语句 存储 过程是具有名字的代码段 ,来完成一些特定的功能。 创建的存储过程保存在数据库的字典中。

    为什么用存储过程:

    将重复性高的一些操作,封装到一个存储过程中,简化对Sql的调用。 批量处理 统一接口, 确保数据的安全 相对与oracle数据来说,Mysql的存储过程功能较弱 使用较少

    存储过程的创建 和调用:

    delimiter $ $: 他与存储过程无关 delimiter 语句将标准分割符–分号(;)更改 $ $ , 因为我们想将存储过程 作为一个整体传递给服务器,而不是让mysql 工具一次解析每个语句,告诉mysql解析器 ,该段命令是否已经结束了,mysql是否可以执行了,默认情况下delimiter是分号;。在命令行客户端中,如果有一行以分号结束,那么回车 后执行 改命令,但是有的时候,不希望mysql这么做。在为可能输入较多的语句,且 语句包含有分号,使用delimiterr$ $ 这样只有$ $出现之后mysql解析器解析执行这段语句

    案例:

    创建存储过程:

    delimiter $$  -- 定义好开始  符号 可以 为$$ 或者//
     CREATE PROCEDURE user_tt()  -- 给存储过程取一个名字
    BEGIN -- 开始
    SELECT * from t_user; --sql语句执行 注意sql 语句结束有分号
    END $$  --结束  注意 符号 和定义开始一致
    

    在这里插入图片描述
    调用存储过程:

    delimiter;-- 把分号改回来
    
    CALL user_tt;
    

    在这里插入图片描述

    查看存储过程:
    查看所有的存储过程:SHOW PROCEDURE STATUS;
    在这里插入图片描述

    ##查看指定数据库的存储过程:SHOW PROCEDURE STATUS WHERE db=“存储过程名”;

    在这里插入图片描述
    查看 指定存储过程源代码: SHOW CREATE PROCEDURE + 存储过程名

    在这里插入图片描述
    删除存储过程 :drop PROCEDURE +存储过程名;

    在这里插入图片描述
    存储过程变量:

    delimiter $$  -- 定义好开始  符号 可以 为$$ 或者//
     CREATE PROCEDURE text_user()  -- 给存储过程取一个名字
    BEGIN -- 开始
    
      -- 声明变量  关键 字declare   `DEFAULT ''  默认值 空字符串
    
    
    
    DECLARE  jie  VARCHAR(255) default ''; 
    
    DECLARE   x,y INT   default 0;
    
    
    SELECT * from t_user; -- sql语句执行 注意sql 语句结束有分号
    
    
    END $$  -- 结束  注意 符号 和定义开始一致
    
    

    在这里插入图片描述
    给变量赋值:
    在这里插入图片描述
    变量的范围:如果在存储过程中声明变量,那么当达到存储过程的 END 语句时 它超出了范围。因此在其他代码块无法 访问

    存储过程参数:

    三种类型:

                                   in  输入类型
                                    
                                    --  根据传入的名称, 获取对应的信息、
    delimiter $$
    CREATE PROCEDURE getName(in name VARCHAR(225))-- 传入参数  in 关键字  VARCHAR类型
    BEGIN 
    
     SELECT * from t_user where  user_code =name; -- 给要查的 赋值
    
    
    END $$
    
    delimiter;
    

    在这里插入图片描述

            out类型的 输出
    
    
    
    delimiter $$
    CREATE PROCEDURE getMima(in name VARCHAR(225),out mima int )-- 传入参数 out  关键字  输出数据
    BEGIN 
    
     SELECT  user_pass into mima  from t_user where  user_code = name; -- 给要查的 user_pass into mima  赋值  name 
    
    
    END $$
    
    
    
    查询结果
    CALL  getMima('鲁班',@m);  -- @m 就时out 的参数  首先执行这句话
    SELECT @m; -- 这里的@m 就是上面所定义的 在这可以直接输出 这只是简写
    
    SELECT @m  from  DUAL 这个是mysql 数据库 提供的一张假表  可以加上参数调用
    
    

    在这里插入图片描述

     inout 类型是又输入又是输出
      delimiter $$
    CREATE PROCEDURE test1808(inout num  int ,in abc  int  )-- 传入参数 out  关键字  输出数据
    BEGIN 
    
    
    set num = num + abc;
     
    END $$
    
    delimiter;
    
    查询结果
    set @num1=220;
    CALL test1808(@num1,10);
    SELECT @num1;
    

    在这里插入图片描述

    存储过程语句:

    if语句: IF expression THEN
    statements;
    END IF;
    IF expression THEN
    statements;
    ELSE
    else-statements;
    END IF;
    CASE语句:
    CASE case_expression
    WHEN when_expression_2 THEN commands …
    ELSE commands
    END CASE;
    循环语句:
    WHILE expression DO
    statements
    END WHILE
    2)REPEAT
    stalemeents;
    UNTIL expression
    END REPEAT

    自定义函数

    案例:

    
      定义 一个自定义函数  在定义函数 和存储过程有区别  定义函数function
    delimiter $$
    CREATE  FUNCTION rand_str(n int) returns  varchar(225)
    BEGIN
    -- 生明一个str 52字母
    DECLARE str VARCHAR(100)  DEFAULT 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'; 
    -- 记录 当前是第几个
    DECLARE i INT DEFAULT 0;
    -- 生成的结果
    DECLARE  res_str  VARCHAR(255)   DEFAULT '';
    -- 循环  
    WHILE i < n DO
    -- 随机生成一个指定的字符串 b bc bce 
    --   1+ RAND()*52  floor(1+rand ()*52);
    --  SUBSTR(str FROM (1+rand()*52),1)
    set res_str=CONCAT(res_str,SUBSTR(str,FLOOR(1+RAND()*52),1));
    SET i= i+1;
    END WHILE;
    RETURN res_str;
    END $$
    delimiter ;
    
    
    结果
    SELECT rand_str(5);
    

    在这里插入图片描述

    案例批量新增:

    这里调用了以上的随机数 方法 函数
    
    delimiter $$
    CREATE  PROCEDURE insert_emp10(in  startNum int, in  max_num int) 
                            --  startNum 从几开始
                            --   max_num 要插入多少条数据
    begin 
    -- 声明 一个变量叫记录当前是第几条数据
     DECLARE  i INT default 0;
    -- 默认情况是自动 提交数据
      set autocommit = 0; -- 不让它自动 提交
    repeat 
    set i= i+1; -- 每循环一次 让i+1
    -- 插入数据
    INSERT into  emp VALUES (startNum+i,rand_str(5),FLOOR(10+RAND()*30));
                                 --  startNum代表是id ,+i是每次循环+1
                                 -- rand_str(5) 调用 数据 数 对name 每一次循环
                                   --   都去生成一个5个字母的名字
                                   --  FLOOR(10+RAND()*30) 年龄 也是随机的 +10
                                   --  是应为随机数是从0开始 *30 是到30岁
    until i =max_num  -- 当i=max_num 就让它退出循环
    
    end  repeat;
    commit;  -- 整体提交所有数据  提高效率 
    end $$
    
    delimiter ;
    

    结果:
    在这里插入图片描述

    展开全文
  • MySQL 存储过程

    千次阅读 多人点赞 2018-12-10 20:55:26
    MySQL 存储过程 存储过程(Stored Procedure)是一种在数据库中存储复杂程序,以便外部程序调用的一种数据库对象 存储过程就是具有名字的一段代码,用来完成一个特定的功能。 创建的存储过程保存在数据库的数据...

    MySQL 存储过程


    存储过程(Stored Procedure)是一种在数据库中存储复杂程序,以便外部程序调用的一种数据库对象

    存储过程就是具有名字的一段代码,用来完成一个特定的功能。
    创建的存储过程保存在数据库的数据字典中

    优点:
    存储过程可封装,并隐藏复杂的商业逻辑。
    存储过程可以回传值,并可以接受参数。
    存储过程无法使用 SELECT 指令来运行,因为它是子程序,与查看表,数据表或用户定义函数不同。
    存储过程可以用在数据检验,强制实行商业逻辑等。
    缺点:
    存储过程,往往定制化于特定的数据库上,因为支持的编程语言不同。当切换到其他厂商的数据库系统时,需要重写原有的存储过程。
    存储过程的性能调校与撰写,受限于各种数据库系统。

    存储过程的参数 :
    参数类型:
    IN输入参数:表示调用者向过程传入值(传入值可以是字面量或变量)
    OUT输出参数:表示过程向调用者传出值(可以返回多个值)(传出值只能是变量)
    INOUT输入输出参数:既表示调用者向过程传入值,又表示过程向调用者传出值(值只能是变量)

    MYSQL 存储过程中的关键语法:

    delimiter//                            声明语句结束符,可以自定义(默认分号)
    create procedure 名称(声明参数1,...)                声明存储过程
    begin...end                            存储过程开始和结束符号
    declare 变量名 变量类型 (unsigned default 默认值)        定义变量
    set 变量名=变量值                        变量赋值
    参数类型(in|out|inout) 参数名 数据类型(int、varchar等)    声明参数


    例子:
    delimiter //                -- 将SQL语句的结束标记设置为//
    drop procedure if exists testprint;    -- 如果存在该名称的存储过程则删除
    create procedure testprint()        -- 创建一个名字为testprint的存储过程
    begin                     -- 代码部分开始
    select '您好!' as infos;        -- 存储过程的代码部分
    end;                     -- 代码部分结束
    //                    -- 结束标记
        
    delimiter ;                -- 编写变异结束后将SQL语句的结束标记还原
    call testprint;                -- 调用存储过程

    in输入参数:
    多个参数用逗号分开,SQL语句最后需加分号
    delimiter //
    create procedure addteacher(in p_tname varchar(20),in p_tsex varchar(4))
    begin 
    insert into teacher (tname,tsex) values(p_tname,p_tsex);
    end;//
    --调用存储过程使用call
    --@pp_tname临时变量:@+变量名
    delimiter ;
    set @pp_tname='王五';
    set @pp_tsex='男';
    call addteacher(@pp_tname,@pp_tsex);

    OUT输出参数:
    delimiter //
    drop procedure if exists selecttname;
    create PROCEDURE selecttname(in p_sname varchar(20),out p_tname varchar(20))
    begin 
    --使用select ... into ...,将查询结果赋值给参数
    select tname into p_tname from teacher 
    inner join class on ctid=tid
    inner join student on scid=cid
    where sname=p_sname;
    end;
    //
    delimiter ;
    set @sname='一一';
    --调用带有out输出参数的存储过程,作为输出参数的变量需要被赋值
    set @tname='';
    call selecttname(@sname,@tname);
    select @tname;

    条件语句

    if-then-else 语句
    以if开始 + 条件 + then + 操作 (+ else + 操作)+ 以end if结尾

    delimiter //
    create procedure proc(in parameter int)  
    begin 
    declare var int;  
    set var=parameter+1;  
    if var=0 then 
    insert into t values(17);  
    end if;  
    if parameter=0 then 
    update t set s1=s1+1;  
    else 
    update t set s1=s1+2;  
    end if;  
    end;  
    //

    case语句
    case + 变量|参数 + when + 值1 + then + 操作 + when + 值2 + then + 操作... + else + 操作 + end case

    delimiter //
    create procedure proc(in parameter int)  
    begin 
    declare var int;  
    set var=parameter+1; 
    case var  
    when 0 then   
    insert into t values(17);  
    when 1 then   
    insert into t values(18);  
    else   
    insert into t values(19);  
    end case;  
    end;  
    //  

    循环语句
    一:
    while 条件 do  循环体 end while

    delimiter //
    create procedure proc()  
    begin 
    declare var int;  
    set var=0;  
    while var<6 do  
    insert into t values(var);  
    set var=var+1;  
    end while;  
    end;  
    //  

    二:
    repeat 循环体 until 循环条件  end repeat;

    delimiter //
    create procedure proc()  
    begin 
    declare v int;  
    set v=0;  
    repeat  
    insert into t values(v);  
    set v=v+1;  
    until v>=5  
    end repeat;  
    end;  
    //
      
    三:
    名称(自定义):loop 循环体 if 条件 leave 名称 end if end loop

    delimiter //
    create procedure proc()  
    begin 
    declare v int;  
    set v=0;  
    LOOP_LABLE:loop  
    insert into t values(v);  
    set v=v+1;  
    if v >=5 then 
    leave LOOP_LABLE;  
    end if;  
    end loop;  
    end;  
    //  

    JDBC调用存储过程

    不带输出参数:

    //加载驱动
    Class.forName("com.mysql.jdbc.Driver");
    //获得连接
    String url = "jdbc:mysql://127.0.0.1:3306/lianxi1";
    String user = "root";
    String userPass = "123456";
    Connection con = DriverManager.getConnection(url, user, userPass);
    //创建存储过程的对象  
    java.sql.CallableStatement  cs = con.prepareCall("{call addstu(?,?)}");
    //给存储过程的参数设置值
    cs.setString(1, "张三");
    cs.setInt(2, "男");
    //执行存储过程 
    n = cs.executeUpdate();

    带输出参数:
    //加载驱动
    Class.forName("com.mysql.jdbc.Driver");
    //获得连接
    String url = "jdbc:mysql://127.0.0.1:3306/lianxi1";
    String user = "root";
    String userPass = "123456";
    Connection con = DriverManager.getConnection(url, user, userPass);
    //创建存储过程的对象  ,querystu根据id查姓名
    java.sql.CallableStatement  cs = con.prepareCall("{call querystu(?,?)}");
    //给存储过程的参数设置值,第一个参数为id
    cs.setInt(1, 2);
    //第二个参数,为out name varchar(20)
    //注册存储过程的第二个参数registerOutParameter(),
    cs.registerOutParameter(2, java.sql.Types.VARCHAR);
    //执行存储过程
    cs.execute();
    //得到存储过程的输出参数值,如果输出为int类型则使用getInt();
    String name = cs.getString(2);


    Mybatis调用存储过程

    有输出参数时:
    XML映射文件内书写语句需要加属性statementType="CALLABLE"
    注释书写SQL语句需要声明:@Options(statementType=StatementType.CALLABLE)
    输出参数写法:#{name,mode=OUT,jdbcType=VARCHAR} ,OUT、VARCHAR需要大写

    XML文件内书写
    不带输出参数:statementType="CALLABLE"可以省略    
    <insert id="addclass" parameterType="map" statementType="CALLABLE">
        call addstu(#{name},#{sex})
    </insert>

    带输出参数:
    注意!传入的参数类型直接为:parameterType="String"无法获得输出参数
    <select id="selecttname" statementType="CALLABLE" parameterType="map">
        call selectname(#{id},#{name,mode=OUT,jdbcType=VARCHAR})
    </select>
    带输出参数的调用:
    String str = "config/mybatis-config.xml";
    InputStream is = Resources.getResourceAsStream(str);
    SqlSessionFactory ss = new SqlSessionFactoryBuilder().build(is);
    SqlSession s = ss.openSession();
    Map<Object,String> map = new HashMap<>();
    map.put("id", 1);
    s.selectOne("selectname",map);
    System.out.println(map.get("name"));

    注解模式,带输出参数写法:
    @Select("call selectname(#{id},#{name,mode=OUT,jdbcType=VARCHAR})")
    @Options(statementType=StatementType.CALLABLE)
    public void selecttname1(Map<Object,String> map);
     

    展开全文
  • 存储过程

    千次阅读 多人点赞 2012-07-12 14:49:38
    将一些固定的操作集中起来由SQL服务器来完成,实现某个特定任务,这就是存储过程。  存储过程是SQL语句和可选控制流程语句的预编译集合。  是一种封装重复任务操作的方法,以一个名称存储,作为一个单元处理。 ...

           将一些固定的操作集中起来由SQL服务器来完成,实现某个特定任务,这就是存储过程。

           存储过程是SQL语句和可选控制流程语句的预编译集合。

           是一种封装重复任务操作的方法,以一个名称存储,作为一个单元处理。

      

              在大型数据库系统中,存储过程和触发器具有很重要的作用。无论是存储过程还是触发器,都是SQL 语句和流程控制语句的集合。就本质而言,触发器也是一种存储过程。存储过程在运算时生成执行方式,所以,以后对其再运行时其执行速度很快。

         

    存储过程的优点:

            1、封装事务规则。

            2、允许标准组件式编程

            3、能够实现较快的执行速度(批处理的T——SQL语句每次运行时都要进行编译和优化,存储过程是预编译)

            4、能过减少网络流量

            5、被作为一种安全机制来充分利用(避免非授权用户对数据的访问)

     

    下面是本章的小结:

        

    存储过程的运行过程:

            1、该过程被划分成部件片段

            2、检查引用数据库中其它对象(表、视图等)的部件,确保引用的对象是存在的,这也被称为分解。

            3、一旦分解完成,该过程的名字将存放到sysobjects表中,而创建存储过程的代码存放在syscomments表中

            4、然后编译,并且,编译过程中将创建如何运行查询的蓝本。该蓝本通常称为常规计划或查询树,查询树存放在sysProcedures表中。

            5、存储过程首次运行时,读出查询计划并完全编译成过程计划,然后运行。这样,节约了每次运行存成过程的语法检查、分解和编译查询树的时间。

     

     

    展开全文
  • 存储过程是一组为了完成特定功能的SQL语句集,经编译后存储在数据库中。用户通过指定存储过程的名字给出参数来执行它。存储过程是数据库中的一个重要对象,任何一个设计良好 的数据库应用程序都应该用到存储过程。 ...

    存储过程是一组为了完成特定功能的SQL语句集,经编译后存储在数据库中。用户通过指定存储过程的名字给出参数来执行它。存储过程是数据库中的一个重要对象,任何一个设计良好 的数据库应用程序都应该用到存储过程。
    优点:
    (1)允许模块化程序设计,就是说只要创建一次过程,以后在程序中就可以调用该过程任意次。
    (2)允许更快执行,如果某操作需要执行大量sql语句或重复执行,存储过程比sql语句执行的要快。
    (3)减少网络流量,例如需要数百行的sql代码的操作有一条执行语句完成,不需要在网络中发送数百行代码。
    (4)更好的安全机制,对于没有权限执行存储过程的用户,也可授权他们的执行存储过程。

    展开全文
  • ORACLE存储过程

    万次阅读 多人点赞 2018-11-02 18:14:48
    oracle存储过程 目录 一.什么是存储过程 二.为什么要写存储过程 三.存储过程基础 1.存储过程结构 2.存储过程语法 3.pl/sql处理存储过程 四.存储过程进阶 1.BUIK COLLECT 2.FORALL 3.pl/sql调试存储过程 ...
  • MySQL:存储过程你的创建

    万次阅读 2019-01-17 00:08:26
  • 其他参考:参数探测(Parameter Sniffing)影响存储过程执行效率解决方案 这篇文章对参数嗅探问题作了很详细的研究https://www.cnblogs.com/lyhabc/articles/3222179.html 这两天遇到一个问题令人比较郁闷,一个大概...
  • SQL存储过程使用介绍

    万次阅读 多人点赞 2017-04-25 13:54:13
    在数据库编程过程中经常会用到存储过程 , 相比 SQL 语句 , 存储过程更方便 , 快速 , 安全 ; 先将存储过程的相关介绍和使用方法总结如下 ;1. 存储过程的概念存储过程 (Stored Procedure) 是在大型数据库系统中 , 一组...
  • Oracle存储过程

    千次阅读 多人点赞 2018-08-18 13:50:17
    Oracle存储过程 存储过程(Stored Procedure)是在大型数据库系统中, 一组为了完成特定功能的 SQL 语句集, 经编译后存储在数据库中,用户通过指定存储过程的名字并给出参数(如果该存储过程带有参数)来执行它...
  • MySQL数据库存储过程讲解与实例

    万次阅读 多人点赞 2018-06-03 00:48:17
    SQL语句需要先编译然后执行,而存储过程(Stored Procedure)是一组为了完成特定功能的SQL语句集,经编译后存储在数据库中,用户通过指定存储过程的名字并给定参数(如果该存储过程带有参数)来调用执行它。...
  • Oracle存储过程快速入门

    万次阅读 2018-02-03 11:37:33
    1.什么是oracle存储过程 存储过程和函数也是一种PL/SQL块,是存入数据库的PL/SQL块。但存储过程和函数不同于已经介绍过的PL/SQL程序,我们通常把PL/SQL程序称为无名块,而存储过程和函数是以命名的方式存储于数据库...
  • MySQL存储过程模板

    万次阅读 2017-12-24 22:22:51
    MySQL存储过程的范例模板,带返回值和异常处理的功能。 DROP PROCEDURE IF EXISTS sp_sample; CREATE PROCEDURE sp_sample(OUT errno INT) root:BEGIN /* 功能: IN参数: OUT参数: errno 存储过程异常标志...
  • Oracle存储过程及调用

    万次阅读 2018-02-02 15:02:51
    Oracle存储过程语法 Oracle的存储过程语法如下: ? 1 2 3 4 5 6 create procedure 存储过程名称(随便取) is 在这里可以定义常量、变量、游标、复杂数据类型这里...
  • 为什么要用存储过程 几个去 IBM 面试的兄弟回来抱怨:去了好几个不同的 IBM 项目组,几乎每个面试官问到数据库的时候都要问用没用过存储过程,烦人不?大家去面的程序员,又不是 DBA,以前的项目都没有用到存储,不...
  • 存储过程调用存储过程

    千次阅读 2018-03-12 23:58:24
    存储过程引用存储过程存储过程B中,调用存储过程A。当存储过程A中RETURN时,跳出A过程。但是在B过程引用处继续往下执行。CREATE OR REPLACE PROCEDURE A AS BEGIN dbms_output.put_line('调用'); return; dbms...
  • 作为测试存储过程 create or replace procedure pri(a in number default 1,b in number default 1) as begin dbms_output.put_line(‘a:’||a||’—-b:’||b); end pri;查询存储过程信息select * from user_...
  • 如下存储过程写法对吗?执行成功,没有报错,但是实际查询数据时发现数据并没有被更新,求解答,问题出在哪里呢? create or replace procedure emp_role_disable Is Begin Update c_userxrole Set expiration_...
  • -- 我定义的存储过程如下,很简单的一个过程,并且在Cmd命令里面运行是正常的。 USE `appraisesystem`; DROP procedure IF EXISTS `protest`; DELIMITER $$ USE `appraisesystem`$$ CREATE DEFINER=`root`@`%...
  • MYSQL存储过程和存储函数入门

    万次阅读 2015-09-08 17:43:19
    一、MYSQL储存过程简介: 储存过程是一个可编程的函数,它在数据库中创建并保存。它可以有SQL语句和一些特殊的控制...存储过程通常有以下优点:1)存储过程能实现较快的执行速度。 如果某一操作包含大量的Transactio
  • 存储过程详解

    万次阅读 多人点赞 2016-03-28 10:59:11
    存储过程详解
  • Java 存储过程

    千次阅读 2012-06-08 20:37:10
    存储过程 使用存储过程的优点有: (1)存储过程在服务器端运行,执行速度快。 (2)存储过程执行一次后,其执行规划就驻留在高速缓冲存储器,在以后的操作中,只需从高速缓冲存储器中调用已编译好的二进制代码...

空空如也

1 2 3 4 5 ... 20
收藏数 187,810
精华内容 75,124
关键字:

存储过程