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

一、什么是存储过程?

  存储过程和函数也是一种 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) //调用储存过程 

  

原文地址:https://www.cnblogs.com/qiuhaitang/p/7879792.html