过程与函数

  

过程与函数(另外还有包与触发器)是命名的PL/SQL块(也是用户的方案对象),被编译后存储在数据库中,以备执行。因此,其它PL/SQL块可以按名称来使用他们,所以,可以将商业逻辑,企业规则写成函数或过程保存到数据库中,以便共享。

  

过程和函数统称为PL/SQL子程序,他们是被命名的PL/SQL块,均存储在数据库中,并通过输入,输出参数或输入/输出参数与其调用者交换信息。过程和函数的唯一区别是函数总向调用者返回数据,而过程则不返回数据。在本节中,主要介绍:

  

1。创建存储过程和函数。
2。正确使用系统级的异常处理和用户定义的异常处理。
3。建立和管理存储过程和函数。

  
      <李>创建函数
    语法如下:李   
  

创建(或更换)函数function_name
(__arg1[{在| |在}]类型1(默认value1),
(最长[{在| |在}]type2[默认value1]],
……
[argn[{在| |在}]typen[默认家]])
[AUTHID定义者| CURRENT_USER]
返回return_type

| & lt;类型。变量的声明部分比;

开始执行部分
返回表达式
异常
异常处理部分
结束function_name;
l,出来,出来是形参的模式。若省略,则为在模式在模式的形参只能将实参传递给形参,进入函数内部,但只能读不能写,函数返回时实参的值不变.OUT模式的形参会忽略调用时的实参值(或说该形参的初始值总是NULL),但在函数内部可以被读或写,函数返回时形参的值会赋予给实参。从具有前两种模式的特性,即调用时,实参的值总是传递给形参,结束时,形参的值传递给实参。调用时,对中于模式的实参可以是常量或变量,但对于和在出模式的实参必须是变量。

  

l一般,只有在确认function_name函数是新函数或是要更新的函数时,才使用或REPALCE关键字,否则容易删除有用的函数。
1例。获取某部门的工资总和:
——获取某部门的工资总和
完成创建或替换
2函数f_get_salary (
3 Dept_no号码,
4 Emp_count数量)
5返回数
6
7号V_sum;
8开始
9选择总和(工资),count(*)到V_sum Emp_count
10从员工DEPARTMENT_ID=Dept_no;
11返回V_sum;

12异常13当NO_DATA_FOUND
14 DBMS_OUTPUT.PUT_LINE(“你需要的数据不存在!”);
15当别人然后
16 DBMS_OUTPUT.PUT_LINE (SQLCODE | |”——“| | SQLERRM);
17结束f_get_salary;
18/
函数创建。

     <李>函数的调用李      

函数声明时所定义的参数称为形式参数,应用程序调用时为函数传递的参数称为实际参数。应用程序在调用函数时,可以使用以下三种方法向函数传递参数:

  

第一种参数传递格式:位置表示法。

  

即在调用时按形参的排列顺序,依次写出实参的名称,而将形参与实参关联起来进行传递。用这种方法进行调用,形参与实参的名称是相互独立,没有关系,强调次序才是重要的。

  

格式为:

  

argument_value1 argument_value2, […]
第二种参数传递格式:名称表示法。

  

即在调用时按形参的名称与实参的名称,写出实参对应的形参,而将形参与实参关联起来进行传递。这种方法,形参与实参的名称是相互独立的,没有关系,名称的对应关系才是最重要的,次序并不重要。

  

格式为:

  

参数=比;参数[…]
其中:参数为形式参数,它必须与函数定义时所声明的形式参数名称相同参数为实际参数。
在这种格式中,形势参数与实际参数成对出现,相互间关系唯一确定,所以参数的顺序可以任意排列。
第三种参数传递格式:组合传递。

  

即在调用一个函数时,同时使用位置表示法和名称表示法为函数传递参数。采用这种参数传递方法时,使用位置表示法所传递的参数必须放在名称表示法所传递的参数前面。也就是说,无论函数具有多少个参数,只要其中有一个参数使用名称表示法,其后所有的参数都必须使用名称表示法。

  

完成声明
2号V_num;
3号V_sum;
4开始
5 V_sum:=f_get_salary (emp_count=比;v_num dept_no=比;10);
6 DBMS_OUTPUT.PUT_LINE(“10号部门工资总和:“| | v_sum | |”,人数:“| | v_num);
7结束;
/
10号8部门工资总和:4400人数:1

  

PL/SQL过程成功完成。
完成var V_sum数量;
完成;var V_num数量;
完成;执行:V_sum:=f_get_salary (: dept_no: V_num);

  

PL/SQL过程成功完成。

  

完成打印:V_sum: V_num

  
 <代码> V_SUM  
  

过程与函数