orcale存储过程

Oracle中函数和存储过程的区别总结版

2016-07-21  本文已影响1660人  是蓝先生

昨天下午和今天上午找了也看了很多资料,现在基本上已经把二者的区别理清楚,以后不要再弄混淆,也算是一种小小的进步吧,而不去想以后会怎样。


一、主要区别

**
**
1、二者最大的区别是:

从一般应用上来看,如果不需要返回值或者需要多个返回值,使用存储过程,如果只用一个返回值,就使用函数。

2、function定义中只能有DDL(如select等)语句;procedure中主要是DML语句(对数据库进行复杂操作时,如对多个表进行Update、Insert、Query、Delete时)。

如果想要使用select的结果集,则要使用游标

**
**
以下需要注意的地方是:

**
**

3、存储过程的命名最好以proc_打头,函数则是func_打头,变量则应该用v_打头。

Paste_Image.png

二、实际举例

**
**
1、函数

(1)创建函数
create or replace function get_salary(
    dept_no number,
    emp_count **out** number)
    return number IS
    v_sum number;
begin
    ...
exception
    ...
end get_salary

(2)调用函数
declare 
    v_num number;
    v_sum number;
begin
    ...(这里应该出现函数名表示调用)
end

2、存储过程

(1)创建存储过程
create or replace procedure pro_demo(
    dept_no number default 10,
    sal_sum out number,
    emp_count out number)
IS
begin
    ...
exception
    ...
end proc_demo;

(2)调用存储过程
调用语法:

1)、exec <过程名>;

2)、execute <过程名>;

3)、在PL/SQL语句块中直接调用。
例如:    
declare
    v_num number;
    v_sum number(8,2);
begin
    procedure pro_demo(dept_no=>1,sal_num=>900,emp_count=>10)(这里出现存储过程名表示调用,传递参数值用=>)
end;
3、本地存储过程

在PL/SQL中还可以在declare块中建立本地存储过程,而不使用关键字create,其目的是:不用将存储过程存储在数据库中,避免更改数据库时带来的麻烦,其主要的使用场景是,临时使用某个存储过程,而不是在以后要重复多次使用。

例子:
declare
    v_num number;
    v_sum number(8,2);
procedure proc_demo(
    dept_no number default 10,
    sal_sum out number,
    emp_count out number)
IS
begin
    ...(这里不用出现存储过程名)
exception
    ...
end proc_demo;

**
**

这里再次复习一下DDL(data defined language),DML(data manipulation language ),DCL(data control language)的区别:

上一篇 下一篇

猜你喜欢

热点阅读