一、什么是存储过程?
存储过程和函数也是一种 PL/SQL 块,是存入数据库的 PL/SQL 块。但存储过程不同于 PL/SQL 程序,我们通常把 PL/SQL 程序成为无名块,而存储过程是以命名的方式存储于数据库中。
与过程相比,存储过程是存在数据库中的一个对象,是一组预编译的SQL语句。
二、存储过程的优点
- 允许模块化程序设计,就是说只需要创建一次过程,以后的程序中就可以调用该过程任意次。
- 允许更快执行,如果某操作需要执行大量SQL语句或重复执行,存储过程比SQL语句执行要快。
- 减少网络流量,例如一个需要数百行的SQL代码的操作由一条执行语句完成,不需要再网络中发送数百行代码。
- 更好的安全机制,对于没有权限执行存储过程的用户,也可授权他们执行存储过程。
三
3-1、存储过程的创建
MySQL存储过程创建的格式:
create procedure 存储过程名(参数列表) begin SQL 语句代码块 end; 举例: creat procedure proc1(OUT s int) begin SELECT COUNT(*) INTO s FROM user; end;
3-2、调用存储过程的方法
- execute模式名.存储过程名[(参数...)];
-
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) //调用储存过程