Oracle存储过程

# 存储过程

  存储过程(Stored Procedure)是在大型数据库系统中,一组为了完成特定功能的SQL 语句集,存储在数据库中,经过第一次编译后再次调用不需要再次编译,用户通过指定存储过程的名字并给出参数(如果该存储过程带有参数)来调用存储过程。

  简单的说就是专门干一段sql语句,可以由数据库自己去调用,也可以由java程序去调用。在oracle数据库中存储过程是procedure。

# 为什么要写存储过程

1.效率高

2.降低网络流量

  存储过程编译好会放在数据库,我们在远程调用时,不会传输大量的字符串类型的sql语句。

3.复用性高

  存储过程往往是针对一个特定的功能编写的,当再需要完成这个特定的功能时,可以再次调用该存储过程。

4.可维护性高

  当功能要求发生小的变化时,修改之前的存储过程比较容易,花费精力少。

5.安全性高

  完成某个特定功能的存储过程一般只有特定的用户可以使用,具有使用身份限制,更安全。

(1).基本结构

  Oracle存储过程包含三部分:过程声明,执行过程部分,存储过程异常(可写可不写,要增强脚本的容错性和调试的方便性那就写上异常处理)

(2).无参存储过程

CREATE OR REPLACE PROCEDURE test AS/IS
    变量2 DATE;
    变量3 NUMBER;
BEGIN
    --要处理的业务逻辑
    EXCEPTION    --存储过程异常
END 

调用:

--方法一
exec test();

--方法二
begin
  test();
end;

例子:

(3).有参存储过程

  a.带参数的存储过程

CREATE OR REPLACE PROCEDURE 存储过程名称(param1 student.id%TYPE)
AS/IS
name student.name%TYPE;
age number :=20;
BEGIN
  --业务处理.....
END

  b.带参数的存储过程并且进行赋值

CREATE OR REPLACE PROCEDURE 存储过程名称(
       s_no in varchar,
       s_name out varchar,
       s_age number) AS
total NUMBER := 0;
BEGIN
  SELECT COUNT(1) INTO total FROM student s WHERE s.age=s_age;
  dbms_output.put_line('符合该年龄的学生有'||total||'');
  EXCEPTION
    WHEN too_many_rows THEN 
    DBMS_OUTPUT.PUT_LINE('返回值多于1行'); 
END
原文地址:https://www.cnblogs.com/wzhqzm/p/13573905.html