




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、第7章 PL/SQL编程基础,前面所学习的SQL是操作关系性数据库的一种通用语言,但是SQL本身是一种非过程化的语言,即不用指明执行的具体方法和途径,而是简单地调用相应语句直接取得结果即可。所以SQL本身并不适合在复杂的业务流程下使用,为了解决这一问题,Oracle提供了PL/SQL编程,这是一种过程化编程语言,与JAVA语言一样关注于处理细节,可以实现较为复杂的业务逻辑。,1,7.1 PL/SQL简介,PL/SQL语法结构,DECLARE -声明部分,例如:定义变量、常量、游标 BEGIN -程序编写、SQL语句 EXECEPTION -处理异常 END; /,声明部分(DECLARE):包
2、含变量定义、用户定义的PL/SQL类型、游标、引用 的函数或过程。 执行部分(BEGIN):包含变量赋值、对象初始化、条件结构、迭代结构、嵌套的PL/SQL块,或是对局部或者存储PL/SQL命名块的调用。 异常部分(exception):包含错误处理语句,该语句可以像执行部分一样使用所有项。 结束部分(END):程序执行到END表示结束,分号用户结束块,正斜杠(/)执行块程序,2,既没有变量,也没有流程控制(分支、循环)。,PL/SQL与SQL区别:,SQL,PL/SQL,PL/SQL是结构化和过程化的结合体。,每条SQL语句逐一发送给数据库。,一次性将多条SQL语言一起发送给数据库,7.1
3、PL/SQL简介,3,最简单的PL/SQL块可以不做任何事情,但是在PL/SQL编程过程中要求,执行块至少要有一条语句,即使这条语句只是编写一个NULL也行。,范例:编写不做任何工作的PL/SQL块。,BEGIN NULL; END; /,范例:编写一个简单的PL/SQL程序,DECLARE v_num number; BEGIN v_num:=30; DBMS_output.put_line(v_num变量的内容是:|v_num); END;,7.1 PL/SQL简介,4,范例:编写PL/SQL块,输入一个雇员编号,而后取得指定的雇员姓名。,Declare v_eno number; v_e
4、name varchar2(10); Begin V_eno:=,7.1 PL/SQL简介,5,7.2 变量的声明与赋值,变量声明并使用变量:,变量名称可以有字母、数字、_、$、#等组成。,所有变量名称要求以字母开头,不能是Oracle中的保留字,变量的长度最多只能为30个字符,变量不区分大小写,6,7.2 变量的声明与赋值,声明变量语法:,变量名称 CONSTANT 类型 not NULL :=value,使用%TYPE声明变量类型:,在编写PL/SQL程序时,如果希望某一个变量与指定数据表中某一列的类型一样,则可以采用 “变量定义”表名称.表名称%TYPE的格式,7,7.2 变量的声明与赋
5、值,Declare v_eno emp.empno%type; v_ename emp.ename%type; Begin DBMS_output.put_line(请输入雇员编号:); v_eno:=,8,7.2 变量的声明与赋值,使用%ROWTYPE声明变量类型,PL/SQL提供了一种%ROWTYPE,使用此标记可以定义表中一行记录的类型。,当用户使用了“selectinto”将表中的一行记录设置为ROWTYPE类型的变量中时,就可以利用“rowtype 变量.表字段”的方式取得表中每行对应的列数据。,9,7.2 变量的声明与赋值,Declare v_deptrow dept%rowtyp
6、e; -装载一行dept记录 Begin select * into v_deptrow from dept where deptno=10; DBMS_output.put_line(部门编号:|v_deptrow.deptno | 名称:|v_deptrow.dname |位置: | v_deptrow.loc); End;,10,7.3 标量类型,数值型,标量类型,字符型,日期型,大对象,布尔,11,7.3 标量类型,12,7.3 标量类型,13,7.3 标量类型,14,7.3 标量类型,15,7.4 程序结构,PL/SQL程序与其他编程语言一样,也拥有自己的3中程序结构,即顺序结构、分
7、支结构、循环结构。,顺序结构,语句1,分支结构,判断条件,循环结构,16,7.4.1 分支结构,IF语句,17,7.4.1 分支结构,范例:查询emp表的工资。输入员工编号,根据编号查询工资。如果工资高于3000元,则显示高工资;如果工资大于2000元则显示中等工资;如果小于2000元,则显示低工资。,18,DECLARE v_empSalemp.sal%TYPE ;- 定义变量与emp.sal字段类型相同 v_empNameemp.ename%TYPE ;- 定义变量与emp.ename字段类型相同 v_enoemp.empno%TYPE ;- 定义变量与emp.empno字段类型相同 BE
8、GIN v_eno := ,7.4.1 分支结构,19,范例:用户输入一个雇员编号,根据它所在的部门给上涨工资,规则: 10部门上涨10%,20上涨20%,30上涨30%; 但是要求最高不能超过5000,超过5000就停留在5000。,7.4.1 分支结构,20,7.4.1 分支结构,DECLARE v_empSalemp.sal%TYPE ;- 定义变量与emp.sal字段类型相同 v_dnoemp.deptno%TYPE ;- 定义变量与emp.deptno字段类型相同 v_enoemp.empno%TYPE ;- 定义变量与emp.empno字段类型相同 BEGIN v_eno := ,
9、21,7.4.1 分支结构,CASE语句,Case语句是一种多条件的判断语句,其功能与IFelseifelse类似,Case语法:,Case变量 when 值|表达式 THEN 执行语句块; when 值|表达式 THEN 执行语句块; Else 条件都不满足时执行语块; End case,22,7.4.1 分支结构,范例:使用CASE进行多条件判断,DECLARE v_salaryemp.sal%TYPE ; v_enoemp.empno%TYPE ; BEGIN v_eno := /,23,7.4.1 分支结构,范例:输入雇员编号,根据雇员的职位进行工资提升,提升要求如下 如果职位是办事员
10、(CLERK),工资增长5%; 如果职位是销售人员(SALESMAN),工资增长8%; 如果职位为经理(MANAGER),工资增长10%; 如果职位为分析员(ANALYST),工资增长20%; 如果职位为总裁(PRESIDENT),工资不增长。,24,7.4.2 循环结构,在PL/SQL程序中,循环结构一共定义了两种,及LOOP循环和for循环。其中,LOOP主要使用在不确定循环次数的操作中,而FOR使用在明确知道循环次数的操作中。,25,7.4.2 循环结构,For循环语法,FOR 循环索引 IN REVERSE 循环区域下限 循环区域上限LOOP 循环执行的语句块; END LOOP;,2
11、6,7.4.2 循环结构,范例:使用LOOP循环,DECLARE v_i NUMBER := 1 ;- 定义一个变量,用于循环 BEGIN LOOP DBMS_OUTPUT.put_line(v_i = | v_i) ; EXIT WHEN v_i = 3 ; v_i := v_i + 1 ; END LOOP ; END ;,27,7.4.2 循环结构,范例:使用WHILELOOP循环,DECLARE v_i NUMBER := 1 ;- 定义一个变量,用于循环 BEGIN WHILE (v_i = 3) LOOP DBMS_OUTPUT.put_line(v_i = | v_i) ; v_
12、i := v_i + 1 ; END LOOP ; END ;,28,7.4.2 循环结构,范例:使用FOR循环,DECLARE v_i NUMBER := 1 ;- 定义一个变量,用于循环 BEGIN FOR v_i IN 1 . 3 LOOP DBMS_OUTPUT.put_line(v_i = | v_i) ; END LOOP ; END ;,29,7.4.2 循环结构,循环控制,在正常循环操作中,如果需要结束循环或者退出当前循环,可以使用EXIT与CONTINUE语句来完成。,范例:使用EXIT结束循环操作,DECLARE v_i NUMBER := 1 ;- 定义一个变量,用于循环
13、 BEGIN FOR v_i IN 1 . 10 LOOP IF v_i = 3 THEN- 当v_i变量增长到3时结束循环 EXIT ; END IF ; DBMS_OUTPUT.put_line(v_i = | v_i) ; END LOOP ; END ;,30,7.4.2 循环结构,循环控制,范例:使用CONTINUE控制循环操作,DECLARE v_i NUMBER := 1 ;- 定义一个变量,用于循环 BEGIN FOR v_i IN 1 . 10 LOOP IF MOD(v_i,2) = 0 THEN- 为偶数的时候不执行后续方法体 CONTINUE ; END IF ; DB
14、MS_OUTPUT.put_line(v_i = | v_i) ; END LOOP ; END ;,31,7.5 内部程序块,对每个PL/SQL程序块,其基本的组成部分就是DECLARE、BEGIN、END,如果用户有需要,也可以在一个程序中定义多个子程序模块,语法如下:,DECLARE -声明部分,例如定义变量、常量、游标 BEGIN -程序编写、SQL语句; DECLARE -子程序编写、SQL语句 EXCEPTION -子程序处理异常 END; EXCEPTION -异常处理 END;,32,7.5 内部程序块,范例:定义内部程序块,DECLARE v_xNUMBER := 30 ;-
15、 此为全局变量 BEGIN DECLARE v_x VARCHAR2(40) := MLDNJAVA ;- 此为局部变量, -只能在内部程序块中使用 v_yNUMBER := 20 ; BEGIN DBMS_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 ;,33,7.6 异常处理,程序开发中会由于设计错误、编码错误、硬件故障或其他原因奇异程序运行出错,PL/SQL中的异
16、常处理机制,使得在出现错误的时候程序仍能执行。,异常类型,编译型异常:程序语法出现错误导致的异常,运行型异常:程序语法没有语法错误,但因为程序运算或者 返回结果而出现错误,34,7.6 异常处理,异常处理语法:,WHEN 异常类型 |用户定义异常|异常代码|OTHERS THEN 异常处理;,在一个EXCEPTION语句块中可以同时编写多个WHEN,用于判断不同的异常类型。异常可以是系统定义的,也可以用户自定义的异常类型。,35,7.6 异常处理,常见预定义异常,36,7.6 异常处理,范例:处理SQL异常 找不到数据,DECLARE v_enoemp.empno%TYPE ; v_enameemp.ename%TYPE ; BEGIN v_eno := ,37,7.6 异常处理,用户自定
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 文化遗产保护的社会共识与多元合作
- 探索历史之旅
- 2025年的合同解除法律效力
- 2025年齿轮加工机床项目规划申请报告
- 作用于血液及造血系统的药物
- 2025至2030年中国三鲜味粉包行业投资前景及策略咨询报告
- 投资银行学试题及答案
- 职业院校关键办学能力提升路径研究
- 现代学校治理体系构建研究
- 临时使用土地合同协议书
- 佛山市顺德区人才发展服务中心招考4名工作人员易考易错模拟试题(共500题)试卷后附参考答案
- 2025年基金与投资管理考试试卷及答案
- 书画培训合作合同范本
- 2025年电子商务基础知识考试试题及答案
- 2025年河北省中考乾坤押题卷物理试卷B及答案
- 2023年广东初中学业水平考试生物试卷真题(含答案)
- 安徽省工伤职工停工留薪期分类目录
- GB∕T 20394-2019 体育用人造草
- 雨水管道非开挖修复工程施工方案
- 通道县生物多样性调查
- 假发行业英语术语整理
评论
0/150
提交评论