




已阅读5页,还剩34页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第7章PL/SQL编程基础,前面所学习的SQL是操作关系性数据库的一种通用语言,但是SQL本身是一种非过程化的语言,即不用指明执行的具体方法和途径,而是简单地调用相应语句直接取得结果即可。所以SQL本身并不适合在复杂的业务流程下使用,为了解决这一问题,Oracle提供了PL/SQL编程,这是一种过程化编程语言,与JAVA语言一样关注于处理细节,可以实现较为复杂的业务逻辑。,7.1PL/SQL简介,PL/SQL语法结构,DECLARE-声明部分,例如:定义变量、常量、游标BEGIN-程序编写、SQL语句EXECEPTION-处理异常END;/,声明部分(DECLARE):包含变量定义、用户定义的PL/SQL类型、游标、引用的函数或过程。执行部分(BEGIN):包含变量赋值、对象初始化、条件结构、迭代结构、嵌套的PL/SQL块,或是对局部或者存储PL/SQL命名块的调用。异常部分(exception):包含错误处理语句,该语句可以像执行部分一样使用所有项。结束部分(END):程序执行到END表示结束,分号用户结束块,正斜杠(/)执行块程序,既没有变量,也没有流程控制(分支、循环)。,PL/SQL与SQL区别:,SQL,PL/SQL,PL/SQL是结构化和过程化的结合体。,每条SQL语句逐一发送给数据库。,一次性将多条SQL语言一起发送给数据库,7.1PL/SQL简介,最简单的PL/SQL块可以不做任何事情,但是在PL/SQL编程过程中要求,执行块至少要有一条语句,即使这条语句只是编写一个NULL也行。,范例:编写不做任何工作的PL/SQL块。,BEGINNULL;END;/,范例:编写一个简单的PL/SQL程序,DECLAREv_numnumber;BEGINv_num:=30;DBMS_output.put_line(v_num变量的内容是:|v_num);END;,7.1PL/SQL简介,范例:编写PL/SQL块,输入一个雇员编号,而后取得指定的雇员姓名。,Declarev_enonumber;v_enamevarchar2(10);BeginV_eno:=,7.1PL/SQL简介,7.2变量的声明与赋值,变量声明并使用变量:,变量名称可以有字母、数字、_、$、#等组成。,所有变量名称要求以字母开头,不能是Oracle中的保留字,变量的长度最多只能为30个字符,变量不区分大小写,7.2变量的声明与赋值,声明变量语法:,变量名称CONSTANT类型notNULL:=value,使用%TYPE声明变量类型:,在编写PL/SQL程序时,如果希望某一个变量与指定数据表中某一列的类型一样,则可以采用“变量定义”表名称.表名称%TYPE的格式,7.2变量的声明与赋值,Declarev_enoemp.empno%type;v_enameemp.ename%type;BeginDBMS_output.put_line(请输入雇员编号:);v_eno:=,7.2变量的声明与赋值,使用%ROWTYPE声明变量类型,PL/SQL提供了一种%ROWTYPE,使用此标记可以定义表中一行记录的类型。,当用户使用了“selectinto”将表中的一行记录设置为ROWTYPE类型的变量中时,就可以利用“rowtype变量.表字段”的方式取得表中每行对应的列数据。,7.2变量的声明与赋值,Declarev_deptrowdept%rowtype;-装载一行dept记录Beginselect*intov_deptrowfromdeptwheredeptno=10;DBMS_output.put_line(部门编号:|v_deptrow.deptno|名称:|v_deptrow.dname|位置:|v_deptrow.loc);End;,7.3标量类型,数值型,标量类型,字符型,日期型,大对象,布尔,7.3标量类型,7.3标量类型,7.3标量类型,7.3标量类型,7.4程序结构,PL/SQL程序与其他编程语言一样,也拥有自己的3中程序结构,即顺序结构、分支结构、循环结构。,顺序结构,语句1,分支结构,判断条件,循环结构,7.4.1分支结构,IF语句,7.4.1分支结构,范例:查询emp表的工资。输入员工编号,根据编号查询工资。如果工资高于3000元,则显示高工资;如果工资大于2000元则显示中等工资;如果小于2000元,则显示低工资。,DECLAREv_empSalemp.sal%TYPE;-定义变量与emp.sal字段类型相同v_empNameemp.ename%TYPE;-定义变量与emp.ename字段类型相同v_enoemp.empno%TYPE;-定义变量与emp.empno字段类型相同BEGINv_eno:=,7.4.1分支结构,范例:用户输入一个雇员编号,根据它所在的部门给上涨工资,规则:10部门上涨10%,20上涨20%,30上涨30%;但是要求最高不能超过5000,超过5000就停留在5000。,7.4.1分支结构,7.4.1分支结构,DECLAREv_empSalemp.sal%TYPE;-定义变量与emp.sal字段类型相同v_dnoemp.deptno%TYPE;-定义变量与emp.deptno字段类型相同v_enoemp.empno%TYPE;-定义变量与emp.empno字段类型相同BEGINv_eno:=,7.4.1分支结构,CASE语句,Case语句是一种多条件的判断语句,其功能与IFelseifelse类似,Case语法:,Case变量when值|表达式THEN执行语句块;when值|表达式THEN执行语句块;Else条件都不满足时执行语块;Endcase,7.4.1分支结构,范例:使用CASE进行多条件判断,DECLAREv_salaryemp.sal%TYPE;v_enoemp.empno%TYPE;BEGINv_eno:=/,7.4.1分支结构,范例:输入雇员编号,根据雇员的职位进行工资提升,提升要求如下如果职位是办事员(CLERK),工资增长5%;如果职位是销售人员(SALESMAN),工资增长8%;如果职位为经理(MANAGER),工资增长10%;如果职位为分析员(ANALYST),工资增长20%;如果职位为总裁(PRESIDENT),工资不增长。,7.4.2循环结构,在PL/SQL程序中,循环结构一共定义了两种,及LOOP循环和for循环。其中,LOOP主要使用在不确定循环次数的操作中,而FOR使用在明确知道循环次数的操作中。,7.4.2循环结构,For循环语法,FOR循环索引INREVERSE循环区域下限循环区域上限LOOP循环执行的语句块;ENDLOOP;,7.4.2循环结构,范例:使用LOOP循环,DECLAREv_iNUMBER:=1;-定义一个变量,用于循环BEGINLOOPDBMS_OUTPUT.put_line(v_i=|v_i);EXITWHENv_i=3;v_i:=v_i+1;ENDLOOP;END;,7.4.2循环结构,范例:使用WHILELOOP循环,DECLAREv_iNUMBER:=1;-定义一个变量,用于循环BEGINWHILE(v_i=3)LOOPDBMS_OUTPUT.put_line(v_i=|v_i);v_i:=v_i+1;ENDLOOP;END;,7.4.2循环结构,范例:使用FOR循环,DECLAREv_iNUMBER:=1;-定义一个变量,用于循环BEGINFORv_iIN1.3LOOPDBMS_OUTPUT.put_line(v_i=|v_i);ENDLOOP;END;,7.4.2循环结构,循环控制,在正常循环操作中,如果需要结束循环或者退出当前循环,可以使用EXIT与CONTINUE语句来完成。,范例:使用EXIT结束循环操作,DECLAREv_iNUMBER:=1;-定义一个变量,用于循环BEGINFORv_iIN1.10LOOPIFv_i=3THEN-当v_i变量增长到3时结束循环EXIT;ENDIF;DBMS_OUTPUT.put_line(v_i=|v_i);ENDLOOP;END;,7.4.2循环结构,循环控制,范例:使用CONTINUE控制循环操作,DECLAREv_iNUMBER:=1;-定义一个变量,用于循环BEGINFORv_iIN1.10LOOPIFMOD(v_i,2)=0THEN-为偶数的时候不执行后续方法体CONTINUE;ENDIF;DBMS_OUTPUT.put_line(v_i=|v_i);ENDLOOP;END;,7.5内部程序块,对每个PL/SQL程序块,其基本的组成部分就是DECLARE、BEGIN、END,如果用户有需要,也可以在一个程序中定义多个子程序模块,语法如下:,DECLARE-声明部分,例如定义变量、常量、游标BEGIN-程序编写、SQL语句;DECLARE-子程序编写、SQL语句EXCEPTION-子程序处理异常END;EXCEPTION-异常处理END;,7.5内部程序块,范例:定义内部程序块,DECLAREv_xNUMBER:=30;-此为全局变量BEGINDECLAREv_xVARCHAR2(40):=MLDNJAVA;-此为局部变量,-只能在内部程序块中使用v_yNUMBER:=20;BEGINDBMS_OUTPUT.put_line(内部程序块输出:v_x=|v_x);DBMS_OUTPUT.put_line(内部程序块输出:v_y=|v_y);END;DBMS_OUTPUT.put_line(外部程序块输出:v_x=|v_x);END;,7.6异常处理,程序开发中会由于设计错误、编码错误、硬件故障或其他原因奇异程序运行出错,PL/SQL中的异常处理机制,使得在出现错误的时候程序仍能执行。,异常类型,编译型异常:程序语法出现错误导致的异常,运行型异常:程序语法没有语法错误,但因为程序运算或者返回结果而出现错误,7.6异常处理,异常处理语法:,WHEN异常类型|用户定义异常|异常代码|OTHERSTHEN异常处理;,在一个EXCEPTION语句块中可以同时编写多个WHEN,用于判断不同的异常类型。异常可以是系统定义的,也可以用户自定义的异常类型。,7.6异常处理,常见预定义异常,7.6异常处理,范例:处理SQL异常找不到数据,DECLAREv_enoemp.empno%TYPE;v_enameemp.ename%TYPE;BEGINv_eno:=,7.6异常处理
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
评论
0/150
提交评论