oracle存储过程

1.存储过程定义

储存程序 (Stored Procedure),又可称预储程序或者存储过程,是一种在数据库中存储复杂程序,
以便外部程序调用的一种数据库对象,它可以视为数据库中的一种函数或子程序。--维基百科

存储子程序是指被命名的PL/SQL 块,以编译的形式存储在数据库服务器中,可以在应用程序中进行调用,是PL/SQL程序模块化的一种体现。Pl/SQL中的存储子程序包括存储过程和(存储)函数两种。通常存储过程用于执行特定的操作,不需要返回值;而函数则用于返回特定的数据。在调用时,存储过程可以作为一个独立的表达式被调用,而甘肃只能作为表达式的一个组成部分被调用。

2.优点

模块化:将程序分解为逻辑模块

可重用性:可以被任意程序调用

可维护性:简化维护操作

安全性: 用户无需直接访问表,分装起来

提高性能:减少网络流量,直接传输存储过程名和参数

过程是用于完成特定任务的子程序

实例

1.编写存储过程无参数

 1 CREATE
 2 OR REPLACE PROCEDURE proc_show_emp (
 3     p_deptno EMPLOYEES.DEPARTMENT_ID % TYPE
 4 ) AS v_sal EMPLOYEES.SALARY % TYPE ;
 5 BEGIN
 6     SELECT
 7         AVG (salary) INTO v_sal
 8     FROM
 9         employees
10     WHERE
11         department_id = p_deptno ; dbms_output.put_line (
12             p_deptno || 'average salary is :' || v_sal
13         ) ; FOR v_emp IN (
14             SELECT
15                 *
16             FROM
17                 employees
18             WHERE
19                 department_id = p_deptno
20             AND salary > v_sal
21         ) loop DBMS_OUTPUT.PUT_LINE (
22             v_emp.employee_id || '' || v_emp.first_name || ' ' || v_emp.last_name
23         ) ;
24     END loop ; EXCEPTION
25     WHEN no_data_found THEN
26         DBMS_OUTPUT.PUT_LINE ('ehhhee') ;
27     END proc_show_emp ;

2.编写存储过程*(有参数)

 1 CREATE
 2 OR REPLACE PROCEDURE proc_return_deptinfo (
 3     p_deptno EMPLOYEES.DEPARTMENT_ID % TYPE,
 4     p_avgsal out employees.salary % TYPE,
 5     p_count out NUMBER
 6 ) AS
 7 BEGIN
 8     SELECT
 9         AVG (salary) ,count (*) INTO p_avgsal,
10         p_count
11     FROM
12         employees
13     WHERE
14         department_id = p_deptno ; EXCEPTION
15     WHEN NO_data_found THEN
16         dbms_output.put_line ('hahhaha') ;
17     END proc_return_deptinfo ;

3.pl/sql调用存储过程

1 SET SERVEROUTPUT ON
2 DECLARE 
3 v_avgsal EMPLOYEES.SALARY % TYPE ; 
4 v_count NUMBER ;
5 BEGIN
6     proc_show_emp (20) ; 
7     PROC_RETURN_DEPTINFO (10, v_avgsal, v_count) ; 
8     dbms_output.put_line (v_avgsal || ' ' || v_count) ;
9 END ;

环境oracle11R2 默认HR

原文地址:https://www.cnblogs.com/kamil/p/6074731.html