版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、过程、函数和包目的在完本钱章学习后,他将掌握以下技艺;PL/SQL过程的定义与用法PL/SQL函数的定义与用法PL/SQL包的定义与用法本章内容PL/SQL过程PL/SQL函数PL/SQL包导航PL/SQL过程PL/SQL函数PL/SQL包PL/SQL过程过程是指用于执行特定操作的PL/SQL块经过运用过程,不仅可以简化客户运用的开发和维护,而且可以提高运用程序的运转性能。语法:CREATE OR REPLACE PROCEDURE procedure_name(argument1mode1 datatype1,argument2mode2 datatype2,)IS|ASPL/SQL Blo
2、ck;其中procedure_name指定过程名,argument指定过程参数;IS或AS用于开场PL/SQL块。PL/SQL过程-建立无参数的过程下面以建立用于输出当前日期和时间的过程out_time为例。CREATE OR REPLACE PROCEDURE out_timeISBEGIN DBMS_SESSION.SET_NLS(NLS_DATE_FORMAT,YYYY-MM-DD HH24:MI:SS); DBMS_OUTPUT.PUT_LINE(sysdate);END;/PL/SQL过程-建立带有输入参数的过程经过运用输入参数,可以将运用程序数据传送到过程。当定义过程参数时,默许参
3、数方式就是输入参数可以运用IN关键字显式定义输入参数。CREATE OR REPLACE PROCEDURE add_empl( empno empl.empno%TYPE,ename empl.ename%TYPE, ebirthday empl.ebirthday%TYPE, egrade empl.egrade%TYPE, ejob empl.ejob%TYPE,emajor empl.emajor%TYPE, indate empl.indate%TYPE,salary empl.salary%TYPE, allow empl.allow%TYPE,deptno empl.deptno
4、%TYPE) IS BEGIN INSERT INTO empl VALUES(empno,ebirthday,ename,ejob,egrade,emajor,indate,salary,allow,depno);END;PL/SQL过程-建立带有输出参数的过程经过运用输入参数,可以将数据或音讯传送到调用环境和运用程序。当定义输出参数时,需求制定参数方式为OUT。下面建立用于更新雇员工资并输出雇员姓名的过程update_sal为例。CREATE OR REPLACE PROCEDURE update_sal( eno varhcar2, sal NUMBER, name OUT VARCHA
5、R2) IS BEGIN UPDATE empl SET salary=sal WHERE empno=eno RETURNING ename INTO name;END;/PL/SQL过程-建立带有输入输出参数的过程经过在过程中运用输入输出函数,可以调用过程时输入数据到过程,在调用终了后输出数据到调用环境和运用程序。当定义输入输出参数时,需求指定参数方式为IN OUT。CREATE OR REPLACE PROCEDURE devide( num1 IN OUT NUMBER,num2 IN OUT NUMBER) IS v1 NUMBER; v2 NUMBER;BEGIN v1:=TRUN
6、C(num1/num2); v2:=MOD(num1,num2); num1:=v1; num2:=v2;END;/PL/SQL过程-调用过程在SQL*PLUS中调用过程时,需求运用CALL或者EXECUTE命令;而在PL/SQL块中过程可以直接运用。过程调用带参数分4种情况:假设无参数,那么可以直接援用过程名;假设有输入参数,那么需求为输入参数提供数值;假设带有输出参数,那么需求运用变量接纳输出结果;假设有输入输出参数,那么调用时需求使器具有输入值的变量。PL/SQL过程-调用无参数的过程直接援用过程名exec out_timePL/SQL过程-调用带有输入参数的过程需求为输入参数提供数据值
7、exec add_empl(1111, 1980-3-4, lei, programmer, 1, 7369, SYSDATE, 800, null, 30)PL/SQL过程-调用带有输出参数的过程需求运用变量接受输出参数的数据值DECLARE v_name empl.ename%TYPE;BEGIN update_sal(&eno,&salary,v_name); DBMS_OUTPUT.PUT_LINE(name:|v_name);END;/输入 雇员号的值: 1111输入工资的值: 2500姓名:leiPL/SQL过程-调用带有输入输出参数的过程调用之前需求定义变量存放输入值,并在调用终
8、了之后运用变量输出数据。DECLARE n1 NUMBER:=&n1; n2 NUMBER:=&n2;BEGIN divide(n1,n2); DBMS_OUTPUT.PUT_LINE(商:|n1|,余数:|n2);END; /输入n1的值:100输入n2的值:30商:3,余数10为参数传送变量或数据当为参数传送变量或数据,可以采用以下3种方法位置传送称号传组合传送PL/SQL过程-运用位置传送为参数传送变量和数据位置传送是指按照参数定义顺序依次为每个参数提供变量或者数据值当运用位置传送时,必需为一切参数提供变量或者输入数据CALL add_empl(2222,1978-12-2, alex,
9、NULL, 1, NULL,SYSDATE,800,NULL,30);PL/SQL过程-运用称号传送为参数传送变量和数据称号传送是指经过制定参数名为其提供变量或者数据当运用称号传送时,需求运用=为参数提供变量或者数值exec add_emp(empno=3333,ebirghday=,1989-2-2,indate=null, egrade=1, ename=JOHN,ejob=null,major=null, salary=null,allow=null,deptno=null)PL/SQL过程-运用组合传送为参数传送变量和数据组合传送是指在调用子程序时结合运用位置传送和称号传送exec a
10、dd_emp(4444, 1985-2-3,AGASI , tester,1, null, indate=SYSDATE, salary=1200, allow=0, deptno=30)PL/SQL过程-过程开发例如为过程参数指定默许值CREATE OR REPLACE PROCEDURE add_emp( empno empl,empno%TYPE, ebirthday empl.ebirthday%TYPE, ename empl.ename%TYPE, ejob empl.ejob%TYPE DEFAULT programmer, egrade empl.egrade%TYPE DEF
11、AULT 1, major empl.mgr%TYPE, indate empl.indate%TYPE DEFAULT SYSDATE, salary empl.salary%TYPE DEFAULT 1000, allow empl.allow%TYPE DEFAULT 0, deptno empl.deptno%TYPE)ISBEGIN INSERT INTO emp VALUES(empno,ebirthday,ename,ejob,egrade major, indate, salary,allow, deptno);END;/PL/SQL过程-运用异常处置CREATE OR REP
12、LACE PROCEDURE update_sal( name empl.ename%TYPE, sal empl.salary%TYPE) IS e_no_rows EXCEPTION;BEGIN UPDATE empl SET salary=sal WHERE LOWER(ename)=LOWER(name); IF SQL%NOTFOUND THEN RAISE e_no_rows; END IF;EXCEPTION WHEN e_no_rows THEN DBMS_OUTPUT.PUT_LINE(这雇员不存在);END;Exec update_sal(jarbus,1500) 这雇员不
13、存在Exec update_sal(allen,1500)PL/SQL过程-维护过程删除过程 DROP PROCEDURE 显示编译错误,查询数据字典USER_ERRORS,或者执行SHOW ERRORS命令。确定过程形状, 查询数据字典USER_OBJECTS。编译过程,ALTER PROCEDURE COMPILE;查看过程 代码,经过查询数据字典USER_SOURCE。导航PL/SQL过程PL/SQL函数PL/SQL包函数函数是一种命名存储块,可以接纳输入并进展定义的逻辑处置以后把结果前往给调用者。与过程类似,只是函数必需有前往值。函数-创建根本语法CREATE OR REPLACE F
14、UNCTION function_name (parameterIN|IN OUT date_type1,parameterIN|IN OUT date_type2,RETURN return_type;IS|AS declaration sectionBEGIN executable statementsEXCEPTION exception handlers;ENDfunction_name; 函数-例子 以下是求从1到某个数累加的例子CREATE OR REPLACE FUNCTION sum(n IN number) RETURN numberAS result number:=0;B
15、EGIN FOR i in 1n LOOP result:=result+i; END LOOP; return(result);END sum;函数-调用调用函数的时候需求保管前往值例子DECLARE num1 number:=10; sum1 number:=0;BEGIN sum1:=sum(num1); DBMS_OUTPUT.PUT_LINE(“result=“|sum1);导航PL/SQL过程PL/SQL函数PL/SQL包PL/SQL包包用于逻辑组合相关的自定义类型、常量、变量、游标、过程和函数。简化了客户运用开发,提高性能,实现信息隐藏、子程序重载等功能。PL/SQL包-规范包规
16、范用于定义包的公用组件,包括常量、变量、游标、自定义类型、过程和函数等。建立包规范语法CREATE OR REPLACE PACKAGE package_nameIS|AS - 定义公用常量、变量等 -定义公用过程和函数等。END package_name;PL/SQL包-例子CREATE OR REPLACE PACKAGE emp_package ISg_deptno empl.deptno%TYPE:=30;PROCEDURE add_employee(empno empl.empno%TYPE, ebirthday empl.ebirthday%TYPE, ename empl.ena
17、me%TYPE, ejob empl.ejob%TYPE DEFAULT programmer, egrade empl.egrade%TYPE,major empl.mgr%TYPE, indate empl.indate%TYPE DEFAULT SYSDATE, salary empl.salary%TYPE DEFAULT 1000, allow empl.allow%TYPE, deptno empl.deptno%TYPE DEFAULT g_deptno);PROCEDURE fire_employee(eno NUMBER);FUNCTION get_sal(eno NUMBE
18、R) RETURN NUMBER;END emp_package;PL/SQL包-建立包体包体用于实现包规范所定义的公用过程和函数,包体不仅可用与实现公用过程和函数,而且可以定义包的私有组件变量、常量等建立包体语法CREATE OR REPLACE PACKAGE BODY package_name IS|AS -定义私有变量、常量等 -实现公用过程和函数END package_name;PL/SQL包-例子CREATE OR REPLACE PACKAGE BODY emp_package ISFUNCTION validate_deptno(dno empl.deptno%TYPE) RE
19、TURN BOOLEANIS temp INT;BEGIN SELECT 1 INTO temp FROM dept WHERE deptno=dno; RETURN TRUE;EXCEPTION WHEN NO_DATA_FOUND THEN RETURN FALSE; END;PROZCEDURE add_employee(empno empl.empno%TYPE, ebirthday empl.ebirthday%TYPE, ename empl.ename%TYPE, ejob empl.ejob%TYPE DEFAULT programmer, egrade empl.egrade%TYPE,major empl.mgr%TYPE, indate empl.indate%TYPE DEFAULT SYSDATE, salary empl.salary%TYPE DEFAULT 1000, allow empl.allow%TYPE, deptno empl.deptno%TYPE DEFAULT g_deptno);ISBEGIN IF validate_deptno(deptno) THEN
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 专业售后售后服务
- 社区党员先锋行动计划保证书
- 企业间借款合同范本格式设计
- 专业代理记账服务合同
- 学业成绩承诺函保证承诺
- 致爱人的道歉信请求女友原谅
- 点工协议书格式
- 专业企业保证书范文
- 数据备份与恢复合同
- 爆破作业合同范本模板
- 大众顶级 辉腾 减振控制的空气悬架_图文
- 血液透析专科操作流程及评分标准
- 电工新技术介绍(课堂PPT)
- 座板式单人吊具(课堂PPT)
- 托班一日生活情况反馈表
- 机电设备维护保养技术
- FLAC3D常用命令
- JGJ_T231-2021建筑施工承插型盘扣式钢管脚手架安全技术标准(高清-最新版)
- 毕业论文(设计)除雪车工作装置设计
- 镜片加工知识之四研磨
- 核电站1E级电气设备鉴定标准技术经验
评论
0/150
提交评论