




下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第10讲PL/SQL的基本语法Oracle本节重点
1.PLSQL语法简介2.PLSQL基本语法PL/SQL(ProcedualLanguage/SQL)PL/SQL也是一种程序语言,被叫做支持SQL的程序语言。PL/SQL是Oracle数据库独有的一种程序语言,是Oracle数据库对SQL语句的扩展是把数据操作和查询语句组织在PL/SQL代码的过程性单元中,通过逻辑判断,循环等操作实现复杂的功能或者计算的程序语言。使用PL/SQL的原因1.提高应用程序的运行性能2.提供了模块化的应用程序设计功能3.允许定义标识符4.具有过程语言控制结构5.具有良好的兼容性6.处理运行错误使用PL/SQL的原因1.提高应用程序的运行性能当应用程序访问RDBMS(RelationalDatabaseManagementSystem)时,每次只能发送单条SQL语句,如图:执行四条SQL语句需要在网络上发送四次语句。而对于Oracle数据库来说,通过使用PL/SQL块,可以将多条SQL语句组织到一个PL/SQL块中,从而降低了网络开销,提高了应用程序的性能。使用PL/SQL的原因通过使用PL/SQL块,在网络上只需要发送一次PL/SQL块,就可以完成所有SQL语句的发送和数据处理工作,减少了网络传输。如图所示:使用PL/SQL的原因二、提高了模块化的程序设计功能当开发数据库应用程序时,为了简化客户端应用程序的开发和维护,首先将企业规则或业务逻辑集成在PL/SQL子程序(过程、函数、包)中,然后在应用程序中调用子程序实现相应的应用的程序功能。例如:CREATEFUNCTIONget_sal(noNUMBER)RETURNNUMBERIS salaryNUMBERE(6,2);BEGIN SELECTsalINTOsalaryFROMemp WHEREemp_no=no; RETURNsalary;END;当开发了该函数之后,应用程序可以直接调用该函数,返回特定的雇员工资,而不需要编写其他程序代码。使用PL/SQL的原因三、允许定义标识符当使用PL/SQL开发应用模块时,为了使得应用模块与应用环境实现数据交互,需要定义变量、常量、游标和例外等各种标识符。使用PL/SQL的原因四、具有过程语言控制结构PL/SQL是Oracle在标准SQL上的过程性扩展,它不久允许在PL/SQL块内嵌入SQL语句,而且允许在PL/SQL块中使用各种类型的条件分支语句和循环语句。使用PL/SQL的原因五、具有良好的兼容性PL/SQL是Oracle提供的用于实现应用模块的语言,在允许运行Oracle的任何平台中都可以使用PL/SQL。PL/SQL程序的基本结构块是PL/SQL中最基本执行单元。PL/SQL块由四个基本部分组成:声明、执行体开始、异常处理、执行体结束。DECLARE–可选部分 变量、常量、游标、用户定义异常的声明BEGIN–必要部分 SQL语句和PL/SQL语句构成的执行程序EXCEPTION–可选部分 程序出现异常时,捕获异常并处理异常END;-必要部分。声明执行体开始例外部分执行体结束PL/SQL程序的基本结构示例一:只包含执行部分的PL/SQL块BEGIN dbms_output.put_line(‘Hello,everyone’);END;dbms_output是Oracle所提供的系统包put_line是该包所包含的过程,用于输出字符串信息。PL/SQL程序的基本结构示例二:包含定义部分和执行DECLARE v_enameVARCHAR2(5);BEGIN SELECTemployee_idINTOv_enameFROM EMPLOYEES WHEREemployee_id=&no; dbms_output.put_line('雇员名:'||v_ename);END;PL/SQL变量的定义identifier[CONSTANT]datatype[NOTNULL][:=expr]identifier标识符最多30个字符加入CONSTANT表示为常量NOTNULL表示不允许为空:=可以为变量赋初值例如:declare v_agenumber(3):=26;--长度为3,初始值为26begin dbms_output.put_line(v_age);end;在编写PL/SQL程序时,为了临时存储数值,必须定义变量。所有变量必须在declare中声明,程序中不允许声明。PL/SQL变量的定义PL/SQL变量——数据类型数值:INTEGER,FLOAT,NUMBER,...字符:CHAR,VARCHAR,VARCHAR2,STRING日期:DATE,TIMESTAMP,INTEVALYEARTOMONTH,...逻辑:BOOLEAN组合量:RECODE,INDEXBYTABLE,...简单类型复合类型PL/SQL表达式关于PL/SQL表达式,包含以下内容:赋值表达式串联运算符PL/SQL表达式-赋值表达式语法:variable:=expression/value(变量:=表达式/值)作用:
为变量赋值 一般书写在语句部分PL/SQL表达式-串联(连接)表达式语法:||作用:用来连接多个值 一般书写在语句部分PL/SQL流程控制19流程控制循环forwhileloop选择ifelsifelseifelseifif判断20IF
布尔表达式THEN
执行语句ENDIF;DECLAREnumber1integer:=80;number2integer:=90;BEGIN
ifnumber1<number2thendbms_output.put_line(number1||'<'||number2);
endif;END;ifelse判断21IF
布尔表达式THEN
执行语句;ELSE
执行语句;ENDIF;DECLAREnumber1integer:=800;number2integer:=90;BEGINifnumber1<number2thendbms_output.put_line(number1||'<'||number2);
elsedbms_output.put_line(number1||'>'||number2);endif;END;ifelsifelse判断22IF
布尔表达式THEN
执行语句;ELSIF布尔表达式THEN
执行语句;ELSE
执行语句;ENDIF;DECLAREnumber1integer:=800;number2integer:=90;BEGIN
ifnumber1<number2thendbms_output.put_line(number1||'<'||number2);
elsifnumber1>number2thendbms_output.put_line(number1||'>'||number2);elsedbms_output.put_line(number1||'='||number2);endif;END;loop简单循环23loop
循环语句段:
if条件语句then exit; else
退出循环的处理语句段; endif;endloop;exit是退出循环,而不是退出整个代码块循环一:loop…exit…end…loop;loop简单循环24任务一:当两个数相等时跳出循环DECLAREnumber1integer:=80;number2integer:=90;BEGIN
loop number1:=number1+1;
ifnumber1=number2then
exit;
else dbms_output.put_line(number1);
endif;
endloop;END;loop简单循环25LOOP要执行的语句;
EXITWHEN<条件语句>/*条件满足,退出循环语句*/ENDLOOP;循环二:loop…exit…when…end…loop;注意:exitwhen实际上就相当于If条件thenexit;endif;loop简单循环26任务二:当两个数相等时跳出循环DECLAREnumber1integer:=80;number2integer:=90;BEGIN
loop number1:=number1+1; dbms_output.put_line(number1);exitwhennumber1=number2;
endloop;END;while循环27WHILE
<布尔表达式>
LOOP
要执行的语句;
ENDLOOP;
循环三:while…loop…endloopwhile循环28任务三:DECLAREnumber1integer:=80;number2integer:=90;BEGINwhilenumber1<number2loopnumber1:=number1+1;dbms_output.put_line(number1);
endloop;END;while循环29任务三:用循环写出从1+2+3…+100for循环30FOR
循环计数器IN[REVERSE]
下限..上限
LOOP
要执行的语句;
ENDLOOP;每循环一次,循环变量自动加1;使用关键字REVERSE,循环变量自动减1。跟在INREVERSE后面的数字必须是从小到大的顺序,而且必须是整数,不能是变量或表达式。可以使用EXIT退出循环。循环四:for…in…loop…endfor循环31任务四:用循环写出从1+2+3…+100declaresum1integer:=0;number1integer:=1;begin
fornumber1in1..100loop
sum1:=sum1+number1;
endloop;dbms_output.put_line(sum1);end;下线..上线数据库赋值数据库赋值是通过SELECT语句来完成的,每次执行SELECT语句就赋值一次,一般要求被赋值的变量与SELECT中的列名要一一对应例子:DECLARE
empnonumber(3):=101;
empnamevarchar2(30);
salnumber(8,2);BEGIN
SELECTfirst_name||last_name,salary
INTOempname,sal
FROMhr.employeesWHEREemployee_id=empno; dbms_output.put_line(empname||'---'||sal);END;注释单行注释 --我是单行注释多行注释/*我是多行注释*/复合类型与简单类型不同,复合变量类型不是数据库中已经存在的数据类型,所以复合变量在声明类型之前,首先要创建使用到的复合类型,然后将变量声明为复合类型。PL/SQLTABLES:表类型PL/SQLRECORDS:记录类型记录类型recordTYPE
记录类型名
ISRECORD(
Field1type1[NOTNULL][:=exp1], Field2type2[NOTNULL][:=exp2], ... Fieldntypen[NOTNULL][:=expn]
);解释:record类型变量声明时可以为null,但必须赋初始值,引用记录型变量的方法是“记录变量名.基本类型变量名”记录是由一组相关的记录成员(Field)组成的.记录类型recordDECLARETYPEmy_recodeISRECORD(
empnovarchar2(20):='100', empnamevarchar2(20));srecodemy_recode;BEGINdbms_output.put_line(srecode.empno);END;数据类型变量名表类型变量tableTYPE
表类型ISTABLEOF
类型
INDEXBYBINARY_INTEGER;表变量名表类型;indexbybinary_integer子句代表以符号整数为索引,这样访问表类型变量中的数据方法就是“表变量名(索引符号整数)”包括两个基本成分:数据处理类型为BINARY_INTEGER主键;标量或记录数据类型的列.表类型变量tableDECLARETYPEmy_tableISTABLEofvarchar2(20)indexbybinary_integer;TYPEmy_table1ISTABLEofvarchar2(20)indexbybinary_integer;table1my_table;table2my_table1;BEGINtable1(1):='xiaowang';table1(2):='xiaowang1';table1(3):='xiaowang2';table2(1):=table1(1);table2(2):=table1(2);table2(3):=table1(3);dbms_output.put_line(table2(1));dbms_output.put_line(table2(2));dbms_output.put_line(table2(3));END;Table与高级语言中的数组的区别PL/SQL中的表没有固定边界,下表可以为负数数组有固定大小,且下标必须大于0通过%TYPE声明变量定义一个变量,其数据类型与已经定义的某个数据变量的类型相同,或者与数据库表的某个列的数据类型相同,这时可以使用%TYPE%TYPE使用场合使用
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 六年级艺术教育综合实践计划
- 初二体育教学资源整合计划
- 外研版英语期末复习计划分享
- 2025年绿色金融产品创新趋势与市场前景分析报告
- 人音版音乐二年级上册课堂创新教学计划
- 英语角活动下学期班主任工作计划
- 七年级语文学期教学计划与反思
- 一年级数学信息技术融合计划
- 2025年春季学期小学家庭教育支持计划
- 2025年医疗美容行业美容仪器市场技术创新与产业政策分析报告
- 2025购销茶叶合同范本
- 山东济南历年中考作文题与审题指导(2005-2021)
- 职业技术学院2024级工业互联网技术专业人才培养方案
- 锝99mTc替曲膦注射液-药品临床应用解读
- 武汉各区2023-2024学年九下化学四调压轴题分类汇编-第8题选择题
- 脑血管造影术的术前及术后护理
- 外墙涂料施工劳务合同范本(8篇)
- 成人重症患者颅内压增高防控护理专家共识2024
- 网络灾难与信息安全应急
- 音乐人类学视角-洞察分析
- 中职语文职业模块期末综合测试题(三)
评论
0/150
提交评论