




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、5Copyright Oracle Corporation, 2001. All rights reserved.存储函数和过程存储函数和过程 1-2Copyright Oracle Corporation, 2001. All rights reserved.存储函数和过程存储函数和过程ORACLE 提供可以把PL/SQL 程序存储在数据库中,并可以在任何地方来运行它。这样就叫存储过程或函数。过程和函数统称为PL/SQL子程序,他们是被命名的PL/SQL块,均存储在数据库中,并通过输入、输出参数或输入/输出参数与其调用者交换信息。过程和函数的唯一区别是函数总向调用者返回数据,而过程则不返回数
2、据。 1-3Copyright Oracle Corporation, 2001. All rights reserved.创建函数创建函数创建函数的语法如下:CREATE OR REPLACE FUNCTION function_name (argment IN | OUT | IN OUT Type , argment IN | OUT | IN OUT Type RETURN return_type IS | AS BEGINFUNCTION_bodyEXCEPTION其它语句END; 1-4Copyright Oracle Corporation, 2001. All rights r
3、eserved.创建函数创建函数例:获取某部门员工数和工资总和CREATE OR REPLACE FUNCTION get_salary(Dept_no NUMBER, Emp_count OUT NUMBER)RETURN NUMBER ISV_sum NUMBER;BEGINSELECT SUM(sal), count(*) INTO V_sum, emp_countFROM emp WHERE deptno=dept_no;RETURN v_sum;EXCEPTION WHEN NO_DATA_FOUND THEN DBMS_OUTPUT.PUT_LINE(你需要的数据不存在!); WH
4、EN OTHERS THEN DBMS_OUTPUT.PUT_LINE(SQLCODE|-|SQLERRM);END get_salary; 1-5Copyright Oracle Corporation, 2001. All rights reserved.调用函数方法调用函数方法函数声明时所定义的参数称为形式参数,应用程序调用时为函数传递的参数称为实际参数。应用程序在调用函数时,可以使用以下三种方法向函数传递参数: 第一种参数传递格式称为位置表示法,格式为: argument_value1,argument_value2 1-6Copyright Oracle Corporation, 2
5、001. All rights reserved.调用函数方法调用函数方法例:计算某部门员工数和工资总和DECLAREV_num NUMBER;V_sum NUMBER;BEGINV_sum :=get_salary(30, v_num);DBMS_OUTPUT.PUT_LINE(30号部门工资总和:|v_sum|,人数:|v_num);END; 1-7Copyright Oracle Corporation, 2001. All rights reserved.调用函数方法调用函数方法第二种参数传递格式称为名称表示法,格式为 :argument = parameter , 其中:argume
6、nt 为形式参数,它必须与函数定义时所声明的形式参数名称相同。Parameter 为实际参数。在这种格式中,形式参数与实际参数成对出现,相互间关系唯一确定,所以参数的顺序可以任意排列。 1-8Copyright Oracle Corporation, 2001. All rights reserved.调用函数方法调用函数方法例:计算某部门的员工数和工资总和DECLAREV_num NUMBER;V_sum NUMBER;BEGINV_sum :=get_salary(emp_count = v_num, dept_no = 30);DBMS_OUTPUT.PUT_LINE(30号部门工资总和
7、:|v_sum|,人数:|v_num);END;1-9Copyright Oracle Corporation, 2001. All rights reserved.调用函数方法调用函数方法第三种参数传递格式称为混合表示法 :即在调用一个函数时,同时使用位置表示法和名称表示法为函数传递参数。采用这种参数传递方法时,使用位置表示法所传递的参数必须放在名称表示法所传递的参数前面。也就是说,无论函数具有多少个参数,只要其中有一个参数使用名称表示法,其后所有的参数都必须使用名称表示法。1-10Copyright Oracle Corporation, 2001. All rights reserved
8、.调用函数方法调用函数方法例:DECLARE Var VARCHAR2(32);BEGINVar := demo_fun(user1, 30, sex = 男);DBMS_OUTPUT.PUT_LINE(var);Var := demo_fun(user2, age = 40, sex = 男);DBMS_OUTPUT.PUT_LINE(var);Var := demo_fun(user3, sex = 女, age = 20);DBMS_OUTPUT.PUT_LINE(var);END;1-11Copyright Oracle Corporation, 2001. All rights re
9、served.参数默认值参数默认值在CREATE OR REPLACE FUNCTION 语句中声明函数参数时可以使用DEFAULT关键字为输入参数指定默认值。 例:CREATE OR REPLACE FUNCTION demo_fun(Name VARCHAR2,Age INTEGER,Sex VARCHAR2 DEFAULT 男)RETURN VARCHAR2 ISV_var VARCHAR2(32);BEGINV_var := name|:|TO_CHAR(age)|岁,|sex;RETURN v_var;END; 1-12Copyright Oracle Corporation, 20
10、01. All rights reserved.参数默认值参数默认值具有默认值的函数创建后,在函数调用时,如果没有为具有默认值的参数提供实际参数值,函数将使用该参数的默认值。但当调用者为默认参数提供实际参数时,函数将使用实际参数值。在创建函数时,只能为输入参数设置默认值,而不能为输入/输出参数设置默认值。 例:DECLARE Var VARCHAR(32);BEGINVar := demo_fun(user1, 30);DBMS_OUTPUT.PUT_LINE(var);Var := demo_fun(user2, age = 40);DBMS_OUTPUT.PUT_LINE(var);Var
11、 := demo_fun(user3, sex = 女, age = 20);DBMS_OUTPUT.PUT_LINE(var);END; 1-13Copyright Oracle Corporation, 2001. All rights reserved.存储过程存储过程在 ORACLE SERVER上建立存储过程,可以被多个应用程序调用,可以向存储过程传递参数,也可以向存储过程传回参数 创建存储过程语法 :CREATE OR REPLACE PROCEDURE Procedure_name (argment IN | OUT | IN OUT Type, argment IN | OUT
12、 | IN OUT Type IS | AS BEGINEXCEPTIONEND; 1-14Copyright Oracle Corporation, 2001. All rights reserved.存储过程存储过程例 :删除指定员工记录CREATE OR REPLACE PROCEDURE DelEmp(v_empno IN emp.empno%TYPE) ASNo_result EXCEPTION;BEGIN DELETE FROM emp WHERE empno=v_empno; IF SQL%NOTFOUND THEN RAISE no_result; END IF; DBMS_O
13、UTPUT.PUT_LINE(编码为|v_empno|的员工已被除名!); 1-15Copyright Oracle Corporation, 2001. All rights reserved.存储过程存储过程例 :EXCEPTION WHEN no_result THEN DBMS_OUTPUT.PUT_LINE(你需要的数据不存在!); WHEN OTHERS THEN DBMS_OUTPUT.PUT_LINE(SQLCODE|-|SQLERRM);END DelEmp; 练习:创建存储过程InsertEmp插入员工记录,包括员工号,员工姓名,雇用日期为当天日期,所在部门。(注意主键约束
14、)1-16Copyright Oracle Corporation, 2001. All rights reserved.调用存储过程调用存储过程存储过程建立完成后,只要通过授权,用户就可以在SQLPLUS 、ORACLE开发工具或第三方开发工具中来调用运行。ORACLE 使用EXECUTE 语句来实现对存储过程的调用: EXECUTE Procedure_name( parameter1, parameter2)例: EXECUTE DelEmp; 1-17Copyright Oracle Corporation, 2001. All rights reserved.调用存储过程调用存储过程
15、例:计算指定部门的工资总和,并统计其中的职工数量。 CREATE OR REPLACE PROCEDURE proc_demo(Dept_no NUMBER DEFAULT 10 , Sal_sum OUT NUMBER,Emp_count OUT NUMBER)ISBEGINSELECT SUM(sal), COUNT(*) INTO sal_sum, emp_count FROM emp WHERE deptno=dept_no;EXCEPTION WHEN NO_DATA_FOUND THEN DBMS_OUTPUT.PUT_LINE(你需要的数据不存在!); WHEN OTHERS T
16、HEN DBMS_OUTPUT.PUT_LINE(SQLCODE|-|SQLERRM);END proc_demo; 1-18Copyright Oracle Corporation, 2001. All rights reserved.调用存储过程调用存储过程调用方法: DECLAREV_num NUMBER;V_sum NUMBER(8, 2); BEGINProc_demo(30, v_sum, v_num);DBMS_OUTPUT.PUT_LINE(30号部门工资总和:|v_sum|,人数:|v_num);Proc_demo(sal_sum = v_sum, emp_count = v
17、_num);DBMS_OUTPUT.PUT_LINE(10号部门工资总和:|v_sum|,人数:|v_num); END;1-19Copyright Oracle Corporation, 2001. All rights reserved.删除过程和函数删除过程和函数可以使用DROP语句删除过程:DROP PROCEDURE proceduer_name;可以使用DROP语句删除函数:DROP FUNCTION function_name;1-20Copyright Oracle Corporation, 2001. All rights reserved.授权执行权给相关的用户或角色授权执
18、行权给相关的用户或角色 如果调式正确的存储过程没有进行授权,那就只有建立者本人才可以运行。所以作为应用系统的一部分的存储过程也必须进行授权才能达到要求。可以用GRANT命令来进行存储过程的运行授权GRANT语法:GRANT system_privilege | role TO user | role | PUBLIC WITH ADMIN OPTIONGRANT object_privilege | ALL ON schema.object TO user | role | PUBLIC WITH GRANT OPTION 1-21Copyright Oracle Corporation, 2001. All rights reserved.授权执行权给相关的用户或角色授权执行权给相关的用户或角色 例:
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 《汉语阅读教程》课件-2教学课件:汉语阅读教程L2
- 2025年委托物业管理合同示范文本格式样本协议
- 2025网签租赁合同需要注意哪些事项
- 肌无力危象的临床护理
- 动脉瘤的临床护理
- 紫癜性肾炎的临床护理
- 2025股权转让合同补充协议书范本
- 2025年一级建造师之一建公路工程实务题库与答案
- 解析表达特点洞悉观察秘妙-《蟋蟀的住宅》教学设计
- 乳头状鳞状细胞癌的临床护理
- 中国房地产指数系统百城价格指数报告(2022年6月)
- 宁波市建设工程资料统一用表(2022版)1 通用分册
- 口腔科诊断证明书模板
- 10kV高压开关柜整定计算书
- 礼赞白衣天使512国际护士节护士表彰大会PPT课件(带内容)
- 竞争性谈判相关表格模板
- 中考物理“极值”与“取值范围”问题专题训练
- 2009年安徽省中考化学试卷【含答案可编辑】
- 越南工业到2025年发展战略及到2035发展展望(提到钢铁)
- 电梯曳引机减速箱的设计、建模与运动仿真分析机械
- PV-1200-(中文版)气候交变稳定性试验(共4页)
评论
0/150
提交评论