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

日期: 栏目:常识 浏览:2

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

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


一、主要区别

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

  • 1).函数(function)总是向调用者返回数据,并且一般只返回一个值;
  • 2).存储过程(procedure)不直接返回数据,但可以改变输出参数的值,这可以近似看作能返回值,且存储过程输出参数的值个数没有限制。

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

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

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

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

  • 1).定义函数或者存储过程时,IN/OUT表示调用函数时,传进来或传出去的参数。如果没有说明in/out,则默认为in;
  • 2).定义的函数必须要有return子句,其后紧跟着返回值得类型;
  • 3).实际调用函数或存储过程时,在declare中声明的变量至少应该对应创建的函数或存储过程中的OUT参数和return参数合起来的个数;
  • 4).可以建立不带参数(即没有返回的参数)、没有变量的存储过程。

**
**

  • 5)执行方式略有不同,存储过程的执行方式有两种(1.使用execute2.使用begin和end),函数除了存储过程的两种方式外,还可以当做表达式使用,例如放在select中(select f1() form dual;)。

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

二、实际举例

**
**
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)ISbegin ...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)ISbegin ...(这里不用出现存储过程名)exception ...end proc_demo;

**
**

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

  • 1).DDL的操作对象(表)
    Create语句:可以创建数据库和数据库的一些对象。
    Drop语句:可以删除数据表、索引、触发程序、条件约束以及数据表的权限等。
    Alter语句:修改数据表定义及属性。

  • 2).DML操作的对象是记录(即数据)
    最常见的是增(insert)、删(delete)、改(update)、查(select)

  • 3).DCL操作的对象是数据库用户的权限
    Grant语句:允许对象的创建者给某用户或某组或所有用户(PUBLIC)某些特定的权限。
    Revoke语句:可以废除某用户或某组或所有用户访问权限

本文地址:https://caijingdemo.com/changshi/26420.html

标签: