Oracle PLSQL语言初级教程之过程和函数
时间:2023-05-03 20:37:00
Oracle PL/SQL语言初级教程的过程和函数
过程和函数
过程和函数以编译的形式存储在数据库中,函数可以没有参数或多个参数和返回值。该过程有零或多个参数,没有返回值。函数和过程可以通过参数列表接收或返回零或多个值。函数和过程的主要区别不在于返回值,而在于它们的呼叫方式。该过程被调用为一个独立的执行语句:
pay_involume(invoice_nbr,30,due_date);
函数以合法的表达式调用:
order_volumn:=open_orders(SYSDATE,30);
语法如下:
CREATE [ OR REPLACE] PROCEDURE [schema.]procedure_name
[parameter_lister]
{AS|IS}
declaration_section
BEGIN
executable_section
[EXCEPTION
exception_section]
END [procedure_name]
语法如下:
paramter_name mode datatype [(:=|DEFAULT) value]
mode有三种形式:IN、OUT、INOUT。
IN这意味着在调用过程中,实际参数的值被传递给过程,形式参数被认为只读取。当过程结束时,控制将返回控制环境,实际参数的值不会改变。
OUT在调用过程中,实际参数的值将被忽略。过程中的内部形式参数只能被赋值,而不能读取数据。过程结束后,将给出实际参数。
INOUT这种模式是IN和OUT组合;实际参数的值将在过程中传递给形式参数,形势参数的值也可以读写。过程结束后,将给出实际参数。
创建函数的语法与过程的语法基本相同。唯一的区别是函数有RETUREN子句
CREATE [ OR REPLACE] FINCTION [schema.]function_name
[parameter_list]
RETURN returning_datatype
{AS|IS}
declaration_section
BEGIN
executable_section
[EXCEPTION]
exception_section
END [procedure_name]
执行部分函数必须是哟或多个return语句。
单行函数和组函数可用于创建函数,例如:
CREATE OR REPLACE FUNCTION my_sin(DegreesIn IN NUMBER)
RETURN NUMBER
IS
pi NUMBER=ACOS(-1);
RadiansPerDegree NUMBER;
BEGIN
RadiansPerDegree=pi/180;
RETURN(SIN(DegreesIn*RadiansPerDegree));
END
-----------------------------------------------------------
包
包是将过程、函数和数据结构捆绑在一起的容器;包由函数头、过程头和外部可视数据结构两部分组成;另一部分是包的主体(package body),包主体包括所有捆绑过程和函数的声明、执行和异常处理。
打包的PL/SQL程序和未包装的程序有很大的不同。包数据一直存在于用户的整个会话过程中。当用户获得包的执行授权时,就等于获得包规范中所有程序和数据结构的权限。但不能只授权包中的某个函数或过程。包可以很重