1、第第8 8章章 函数与存放过程函数与存放过程Oracle数据库中不但能够使用单条语句对数据库进行数据库中不但能够使用单条语句对数据库进行增、删、改、查操作,而且能够多条语句组成一个语句块,增、删、改、查操作,而且能够多条语句组成一个语句块,并一起执行。这些语句块能够进行显式命名,并被其它应用并一起执行。这些语句块能够进行显式命名,并被其它应用调用。这些命名语句块被称为函数与存放过程。本章将重点调用。这些命名语句块被称为函数与存放过程。本章将重点介绍函数与存放过程使用。介绍函数与存放过程使用。lOracle中自定义函数;中自定义函数;lOracle中存放过程;中存放过程;l包装函数与存放存放过程
2、包装函数与存放存放过程程序包。程序包。第1页8.1 8.1 函数函数函数是函数是Oracle数据库中惯用对象之一,与其它编程语数据库中惯用对象之一,与其它编程语言函数一样,言函数一样,Oracle中函数也必须返回一个值。这也是函数中函数也必须返回一个值。这也是函数区分于存放过程主要特征。区分于存放过程主要特征。第2页8.1.1 8.1.1 函数介绍函数介绍1函数与功效划分函数与功效划分2函数参数函数参数3函数返回值函数返回值第3页8.1.2 8.1.2 创建函数创建函数1创建函数创建函数create or replace function get_hello_msgreturn varchar
3、2 as begin return hello world;end get_hello_msg;2在数据字典中查看函数信息在数据字典中查看函数信息select object_name,object_type,status from user_objects where lower(object_name)=get_hello_msg3查看函数返回值查看函数返回值 set serverout on;declare msg varchar2(20);begin msg:=get_hello_msg;dbms_output.put_line(msg);end;第4页8.1.3 8.1.3 函数中括号
4、函数中括号其它标准编程语言中,函数括号都是必需,不过函数其它标准编程语言中,函数括号都是必需,不过函数get_hello_msg并没有使用小括号。当函数需要传入参数时,并没有使用小括号。当函数需要传入参数时,参数列表必须使用小括号括起来,不过当函数没有参数时,参数列表必须使用小括号括起来,不过当函数没有参数时,小括号能够省略。当函数没有小括号时,在形式上和变量相小括号能够省略。当函数没有小括号时,在形式上和变量相同,那么有可能会产生变量冲突。同,那么有可能会产生变量冲突。第5页8.1.4 8.1.4 函数参数函数参数在在8.1.2节中创建函数节中创建函数get_hello_msg是无参数函数,
5、本节将演示是无参数函数,本节将演示带参数函数创建和使用。带参数函数创建和使用。create or replace function get_tax(p_salary number)return number as begin declare tax_salary number;begin tax_salary:=p_salary-;if tax_salary柳青柳青,in_age=19);end;第15页8.2.7 8.2.7 存放过程参数存放过程参数参数默认值参数默认值有时,存放过程参数有很多个。对于用户来说,部分参有时,存放过程参数有很多个。对于用户来说,部分参数并非必需,那么,在定义存放
6、过程时应该为可选参数设定数并非必需,那么,在定义存放过程时应该为可选参数设定默认值,以允许用户不为该参数传值。需要注意是,默认值默认值,以允许用户不为该参数传值。需要注意是,默认值是仅对是仅对IN参数而言,参数而言,OUT和和IN OUT参数没有默认值。范例参数没有默认值。范例8-17演示了怎样使用演示了怎样使用IN参数默认值。参数默认值。create or replace procedure insert_student(in_student_id in number,in_student_name in varchar2,in_student_age in number default 2
7、0)as begin insert into students values(in_student_id,in_student_name,in_student_age);commit;end insert_student;begin insert_student(11,王蒙王蒙);end;第16页8.2.8 8.2.8 存放过程参数存放过程参数参数次序总结参数次序总结在讲解了三种参数使用方法之后,能够对参数次序总结在讲解了三种参数使用方法之后,能够对参数次序总结以下:以下:含有默认值参数应该置于参数列表末尾,因为有时用户含有默认值参数应该置于参数列表末尾,因为有时用户需要省略该参数;没有默认值
8、参数能够遵照需要省略该参数;没有默认值参数能够遵照“IN参数参数”“OUT参数参数”“IN OUT参数参数”。第17页8.3 8.3 程序包程序包程序包能够将若干个函数或者存放过程组织起来,作为程序包能够将若干个函数或者存放过程组织起来,作为一个对象进行存放。程序包通常由两部分组成:规范一个对象进行存放。程序包通常由两部分组成:规范(specification)和主体()和主体(body)。程序包也能够包含常)。程序包也能够包含常量和变量,包中全部函数和存放过程都能够使用这些变量和量和变量,包中全部函数和存放过程都能够使用这些变量和常量。常量。第18页8.3.1 8.3.1 规范规范1创建程序
9、包规范创建程序包规范create or replace package pkg_students as studentString varchar2(500);studentAge number:=18;function get_student_string return varchar2;procedure update_student(in_student_id in number);procedure insert_student(in_student_id in number,in_student_name in varchar2,in_student_age in varchar2)
10、;procedure delete_student(in_student_id in number);end pkg_students;2在数据字典中查看程序包规范信息在数据字典中查看程序包规范信息select object_name,object_type,status from user_objects where lower(OBJECT_NAME)=pkg_students第19页8.3.2 8.3.2 主体主体1创建程序包主体创建程序包主体create or replace package body pkg_students asend pkg_students;范例:范例:crea
11、te or replace package body pkg_students as function get_student_string return varchar2 is begin return students;end get_student_string;end pkg_students;2在数据字典中查看该程序包主体信息在数据字典中查看该程序包主体信息select object_name,object_type,status from user_objects where lower(OBJECT_NAME)=pkg_students 第20页8.3.3 8.3.3 调用程序包
12、中函数调用程序包中函数/存放过程存放过程对于程序包中函数,能够直接在对于程序包中函数,能够直接在select语句进行调用。语句进行调用。调用格式为调用格式为package_name.function_name()。以调用程序。以调用程序包包pkg_students中函数中函数get_student_string()为例,对应代为例,对应代码以下所表示。码以下所表示。select pkg_students.get_student_string()from dual第21页8.3.4 8.3.4 程序包中变量程序包中变量程序包中变量普通申明在规范中,而且能够被主体中全程序包中变量普通申明在规范中,
13、而且能够被主体中全部函数部函数/存放过程共享。存放过程共享。第22页8.4 8.4 本章实例本章实例存放过程应用非常广泛,能够用来处理非常复杂问题。存放过程应用非常广泛,能够用来处理非常复杂问题。其中比较惯用一个应用为循环处理。有时,将一条语句能够其中比较惯用一个应用为循环处理。有时,将一条语句能够处理问题,使用存放过程来处理,反而是一个更加好策略。处理问题,使用存放过程来处理,反而是一个更加好策略。第23页8.5 8.5 本章小结本章小结本章主要讲述了数据库中两个主要对象,函数与存放过本章主要讲述了数据库中两个主要对象,函数与存放过程。二者是程。二者是Oracle与其它编程语言非常相近地方。
14、函数和存与其它编程语言非常相近地方。函数和存放过程本质是复杂放过程本质是复杂SQL语句组合,在语句组合,在Oracle编程中起了至关编程中起了至关主要作用。用户编写代码能够储存并重用,这使得主要作用。用户编写代码能够储存并重用,这使得Oracle编编程含有编程语言基本特点。另外,程含有编程语言基本特点。另外,Oracle提供了许多安全机提供了许多安全机制便于控制函数和存放过程访问权限,也使得函数和存放过制便于控制函数和存放过程访问权限,也使得函数和存放过程含有了愈加灵活应用。程序包和主体概念,则表达了程含有了愈加灵活应用。程序包和主体概念,则表达了Oracle编程照样能够含有面向接口编程特点,使得编程照样能够含有面向接口编程特点,使得Oracle编编程愈加规范、可靠。程愈加规范、可靠。第24页8.6 8.6 习题习题1什么是函数什么是函数函数确实定性函数确实定性?2简述存放过程三种参数特点。简述存放过程三种参数特点。3程序包由哪两部分组成,二者关系怎样?程序包由哪两部分组成,二者关系怎样?4函数和存放过程最大区分是什么?函数和存放过程最大区分是什么?第25页
©2010-2024 宁波自信网络信息技术有限公司 版权所有
客服电话:4008-655-100 投诉/维权电话:4009-655-100