oracle子程序和程序包.ppt_第1页
oracle子程序和程序包.ppt_第2页
oracle子程序和程序包.ppt_第3页
oracle子程序和程序包.ppt_第4页
oracle子程序和程序包.ppt_第5页
已阅读5页,还剩21页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第七章,子程序和程序包,回顾,游标用于处理查询结果集中的数据 游标类型有:隐式游标、显式游标和 REF 游标 隐式游标由 PL/SQL 自动定义、打开和关闭 显式游标用于处理返回多行的查询 显式游标可以删除和更新活动集中的行 要处理结果集中所有记录时,可使用循环游标 在声明 REF 游标时,不需要将 SELECT 语句与 其关联,目标,了解和使用子程序 了解和使用程序包,子程序 2-1,命名的 PL/SQL 块,编译并存储在数据库中。 子程序的各个部分: 声明部分 可执行部分 异常处理部分(可选) 子程序的分类: 过程 执行某些操作 函数 执行操作并返回值,子程序 2-2,子程序的优点: 模块化 将程序分解为逻辑模块 可重用性 可以被任意数目的程序调用 可维护性 简化维护操作 安全性 通过设置权限,使数据更安全,过程 8-1,过程是用于完成特定任务的子程序 例如:,前往售票厅,询问关于车票的信息,排队等候,在柜台购买车票,过程 8-2,创建过程的语法: CREATE OR REPLACE PROCEDURE () IS|AS BEGIN EXCEPTION END;,创建过程,可指定运行过程需传递的参数,处理异常,包括在过程中要执行的语句,过程 8-3,create or replace procedure test4(v_id varchar2) is v_ename emp.ename%type; v_sal emp.sal%type; begin select ename, sal into v_ename,v_sal from emp where empno=v_id; dbms_output.put_line(v_ename| |v_sal); end;,过程 8-4,执行过程的语法: EXECUTE procedure_name(parameters_list);,SQL SET SERVEROUTPUT ON SQL EXEC proc_stu(007);,过程 8-5,过程参数的三种模式: IN 用于接受调用程序的值 默认的参数模式 OUT 用于向调用程序返回值 IN OUT 用于接受调用程序的值,并向调用程序返回更新的值,过程 8-6,create or replace procedure test5( x in number, y in number, z out number ) as begin z:=x+y; end;,过程 8-7,create or replace procedure test6( a in out number, b in out number ) is begin dbms_output.put_line(a); dbms_output.put_line(b); a:=100; b:=100; end;,SQL SET SERVEROUT ON SQL declare num1 number := 100; num2 number := 500; begin p_swap(num1,num2); dbms_output.put_line(num1=|num1); dbms_output.put_line(num2=|num2); end; /,过程 8-8,将过程的执行权限授予其他用户: 删除过程:,SQL GRANT EXECUTE ON proc_stu TO SCTOO; SQL GRANT EXECUTE ON proc_swap TO PUBLIC;,SQL DROP PROCEDURE proc_swap;,函数 4-1,函数是可以返回值的命名的 PL/SQL 子程序。 创建函数的语法: CREATE OR REPLACE FUNCTION (param1,param2) RETURN IS|AS local declarations BEGIN Executable Statements; RETURN result; EXCEPTION Exception handlers; END;,函数 4-2,定义函数的限制: 函数只能接受 IN 参数,而不能接受 IN OUT 或 OUT 参数 形参不能是 PL/SQL 类型 函数的返回类型也必须是数据库类型 访问函数的两种方式: 使用 PL/SQL 块 使用 SQL 语句,函数 4-3,创建函数: 查看函数: var name varchar2; exec :name:=funl(函数名字) 从 SQL 语句调用函数:,CREATE OR REPLACE FUNCTION func_hello RETURN VARCHAR2 IS BEGIN RETURN 朋友,您好; END; /,SQL SELECT func_hello FROM DUAL;,函数 4-4,create or replace function get_sal(v_ename in varchar2) return number is v_sal number; begin select sal into v_sal from emp where upper(ename)=upper(v_ename); return v_sal; exception when no_data_found then raise_application_error(-20000,员工不存在); end;,过程和函数的比较,程序包,程序包是对相关过程、函数、变量、游标和异常等对象的封装 程序包由规范和主体两部分组成,声明程序包中公共对象。包括类型、变量、常量、异常、游标规范和子程序规范等,声明程序包私有对象和实现在包规范中声明的子程序和游标,程序包,规范,主体,创建程序包 2-1,程序包规范 CREATE OR REPLACE PACKAGE package_name IS|AS Public item declarations Subprogram specification END package_name;,程序包主体 CREATE OR REPLACE PACKAGE BODY package_name IS|AS Private item declarations Subprogram bodies BEGIN Initialization END package_name;,创建程序包 2-2,create or replace package pack_stu As v_globalid char(8); procedure proc_stu(v_id varchar2); function func_stu(v_id varchar2) return varchar2; end pack_stu; /,create or replace package body pack_stu As procedure proc_stu(v_id varchar2) Is v_name t_student.f_name%type; v_dept t_student.f_department%type; v_class t_student.f_class%type; begin v_globalid := v_id; select f_name,f_department,f_class into v_name,v_dept,v_class from t_student where f_id=v_id; . end proc_stu; function func_stu(v_id varchar2) return varchar2 As . end func_stu; end pack_stu; /,程序包的优点,模块化 更轻松的应用程序设计 信息隐藏 新增功能 性能更佳,程序包中的游标 2-1,游标的定义分为游标规范和游标主体两部分 在包规范中声明游标规范时必须使用 RETURN 子句指定游标的返回类型 RETURN子句指定的数据类型可以是: 用 %ROWTYPE 属性引用表定义的记录类型 程序员定义的记录类型,程序包中的游标 2-2,SQL CREATE OR REPLACE PACKAGE pack_cur As Cursor cur_stu(stuclass number) return t_student%rowtype; procedure proc_stu(stuclass number); end; /,SQL CREATE OR REPLACE PACKAGE BODY pack_cur AS Cursor cur_stu(stuclass number) return t_student%rowtype Is select * from t_student where f_class = stuclass; procedure proc_stu(stuclass number) As rec_stu t_student%rowtype; begin Open cur_stu(stuclass); loop Fetch cur_stu Into rec_stu; Exit when cur_stu%NotFound; dbms_output.put_line(学生姓名:|rec_stu.f_name); end loop; end proc_stu; end; /,有关子程序和程序包的信息,USER_OBJECTS 视图包含用户创建的子程序和程序包的信息 USER_SOURCE 视图存储子程序和程序包的源代码,SELECT object_name, object_type FROM USER_OBJECTS WHERE object_type IN (PROCEDURE, FUNCTION, PACKAGE, PACKAGE BODY);,SELECT line, te

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论