• 《数据库优化》- 存储过程


    一、什么是存储过程?

      存储过程和函数也是一种 PL/SQL 块,是存入数据库的 PL/SQL 块。但存储过程不同于 PL/SQL 程序,我们通常把 PL/SQL 程序成为无名块,而存储过程是以命名的方式存储于数据库中

      与过程相比,存储过程是存在数据库中的一个对象,是一组预编译的SQL语句。

    二、存储过程的优点

    1. 允许模块化程序设计,就是说只需要创建一次过程,以后的程序中就可以调用该过程任意次。
    2. 允许更快执行,如果某操作需要执行大量SQL语句或重复执行,存储过程比SQL语句执行要快。
    3. 减少网络流量,例如一个需要数百行的SQL代码的操作由一条执行语句完成,不需要再网络中发送数百行代码。
    4. 更好的安全机制,对于没有权限执行存储过程的用户,也可授权他们执行存储过程。

      3-1、存储过程的创建

      MySQL存储过程创建的格式:

      create procedure 存储过程名(参数列表)
        begin
        SQL 语句代码块
        end;
      举例:
      creat procedure proc1(OUT s int)
        begin
         SELECT COUNT(*) INTO s FROM user;
        end;
    

      3-2、调用存储过程的方法

    1. execute模式名.存储过程名[(参数...)];
    2. begin模式名.存储过程名[(参数...)]; end;

      :存储过程只是一个行程过程,在编译成功之后,要调用才可以看到效果。

      其中:可选关键字 or replace 表示

      CREATE OR REPLACE PROCEDURE myproc   AS   iNUMBER ;   BEGIN   i :=100 ;   DBMS_OUTPUT.put_line('i = '||i) ;   END ;

      执行过程: exec 过程名字

      下面编写一个过程,要求,可以传入部门的编号,部门的名称,部门的位置,之后调用此

      过程就可以完成部门的增加操作。

      CREATE OR  REPLACE  PROCEDURE myproc(dno  dept.deptno%TYPE,name
      dept.dname%TYPE,dl dept.loc%TYPE)
      AS
      couNUMBER ;
      BEGIN
      --  判断插入的部门编号是否存在,如果存在则不能插入
      SELECT COUNT(deptno) INTO cou FROM dept WHEREdeptno=dno ;
      IFcou=0 THEN
      --  可以增加新的部门
      INSERT INTO dept(deptno,dname,loc) VALUES(dno,name,dl) ;																														  
      DBMS_OUTPUT.put_line('部门插入成功!') ;
      ELSE
      DBMS_OUTPUT.put_line('部门已存在,无法插入!') ;
      ENDIF ; 
      END ;
      /

    四、删除存储过程

      一个存储过程在不需要时可以删除。删除存储过程的人是过程的创建者或者拥有DROP ANY PROCEDURE系统权限的人。

      删除存储过程的语法如下:

      drop procedure 存储过程名;

     五、MySQL调用存储过程

        Set @n=1 //声明变量
        Call procName(@n) //调用储存过程 
    

      

  • 相关阅读:
    TabControl添加关闭按钮
    Windows & RabbitMQ:集群(clustering) & 高可用(HA)
    Windows & RabbitMQ:Shovel
    15项最佳电子产品影响人类未来
    收藏很久的开关电源书籍
    我也不想这样(转载)
    vbs 脚本轻松搞定JDK的环境变量配置
    开关电源基本知识
    浅谈软件开发定律系列之帕金森定律(Parkinson’s Law)
    堕落的时候看看——清华大学老师的一席话
  • 原文地址:https://www.cnblogs.com/qiuhaitang/p/7879792.html
Copyright © 2020-2023  润新知