您好,欢迎访问三七文档
当前位置:首页 > IT计算机/网络 > 数据库 > Oracle(培训班带出来)
PL/SQL简介Oracle公司在标准SQL语言的基础上发展出了PL/SQL(ProceduralLanguage/SQL,即过程化SQL语言)语言,将变量、控制结构、过程和函数等结构化程序设计的要素引入SQL语言中,这样就能够编写出较复杂的SQL程序了。以bdyd的身份登录,创建一个用户表testtablecreatetabletesttable(recordNumbernumber(4)notnull,currentDatedatenotnull);向上述数据库表中插入100条记录setserveroutputondeclaremaxrecordsconstantint:=100;inumber:=1;beginforiin1..maxrecordsloopinsertintotesttable(recordnumber,currentdate)values(i,sysdate);endloop;dbms_output.put_line('成功录入数据!');commit;end;其中,dbms_output为系统默认的程序包,put_line是包中定义的方法,功能是输出信息。PL/SQL程序结构结合上述实例进行分析,一个完整的PL/SQL程序的结构可以分成以下3部分:1定义部分:以declare开始,定义在程序中所要使用的常量、变量等等。它不像高级语言那样可以在程序执行过程中进行定义,所有用到的内容都必须在declare中进行定义。2执行部分:以begin开始,以end结束,中间部分是对数据库的操作语句和各种流程控制语句。3异常处理部分:该部分包含在执行部分里面,以exception标识,该部分用来对应用程序产生的例外进行处理。一个完整的PL/SQL的结构declare定义部分begin执行部分exception异常处理部分end在上述3部分中,只有begin...end部分是不可缺少的1)begin...end部分setserveroutputonbegindbms_output.put_line('helloworld');end;2)declare部分setserveroutputondeclarev_stuNamevarchar2(20);beginv_stuName:='zhangsan';dbms_output.put_line(v_stuName);end;declarev_stuNamevarchar2(20)notnull:='lisi';begincommit;end;3)exception异常处理部分setserveroutputondeclarev_numnumber:=0;beginv_num:=9/v_num;dbms_output.put_line(v_num);exceptionwhenothersthendbms_output.put_line('error');end;常量常量的定义:常量名constant数据类型:=值示例:declarePIconstantnumber(9):=3.1415926;begincommit;end;变量1基本数据类型变量的定义:变量名数据类型[notnull]:=初始值示例:declareagenumber(3):=25;begincommit;end;2复合数据类型变量:法一:使用%type定义变量为了让变量的类型和数据库表中字段的数据类型一致,Oracle9i提供了%type的定义方法。这样当数据库表中字段的类型修改后,PL/SQL程序中相应变量的类型也自动修改。示例:declaremydatetesttable.currentDate%type;begincommit;end;法二:记录类型变量很多结构化程序设计语言都提供了记录类型的数据类型,在PL/SQL中,也支持将多个基本数据类型捆绑在一起的记录数据类型。示例:declaretypestuInfoisrecord(stuNamevarchar2(20),stuAgenumber,birthdaydate);myInfostuInfo;beginmyInfo.stuName:='zhangsan';myInfo.stuAge:=25;myInfo.birthday:=sysdate;dbms_output.put_line(myInfo.birthday);end;法三:使用%rowtype定义变量使用%type可以使得变量的类型和数据库表中字段的类型一致,而使用%rowtype可以使得变量的类型和整个记录的类型一致。declaremytabletesttable%rowtype;beginselect*intomytablefromtesttablewhererecordnumber=99;dbms_output.put_line(mytable.currentdate);end;declaremydeptdept%rowtype;beginselect*intomydeptfromdeptwheredeptno=10;dbms_output.put_line(mydept.loc);end;在上述示例中,定义了一个变量mytable,它的类型和数据库表testtable的结构相同。表达式常量,变量经常要组合成表达式来进行各种运算,下面介绍在PL/SQL中常见表达式的运算规则。1算术表达式:算术运算符:+-*/**示例:setserveroutputondeclareresultnumber;beginresult:=10+4*5+5**2;dbms_output.put_line('运算结果是'||to_char(result));end;declareareanumber;radiusnumber:=3;beginarea:=3.14*radius*radius;dbms_output.put_line(area);end;还有关系表达式、逻辑表达式等等。条件控制1)if……elseif条件then语句段1else语句段2endif;示例:setserveroutputondeclarenumber1number:=90;number2number:=30;beginifnumber1=number2thendbms_output.put_line('number1=number2');elsedbms_output.put_line('number1number2');endif;end;同结构化程序设计语言一样,if语句也可以嵌套。if条件1thenif条件2then语句段1;else语句段2;endif;else语句段3;endif;declarescorenumber:=76;beginifscore=85thendbms_output.put_line('good');elseifscore=75andscore85thendbms_output.put_line('normal');elsedbms_output.put_line('worse');endif;endif;end;case语句declarescorenumber:=88;gradevarchar2(20);begincasewhenscore=90thendbms_output.put_line('A');whenscore=80andscore=89thendbms_output.put_line('B');whenscorebetween70and79thendbms_output.put_line('C');elsedbms_output.put_line('belowC');endcase;end;循环控制1)loop…exit…endlooploop循环体if条件语句thenexit;else退出循环的语句处理endif;endloop;示例:setserveroutputondeclarenumber1number:=80;number2number:=90;inumber:=0;beginloopnumber1:=number1+1;ifnumber1=number2thenexit;elsei:=i+1;endif;endloop;dbms_output.put_line('共循环次数:'||to_char(i));end;2)loop…exitwhen..endloopexitwhen等价于if条件thenexit;endif;示例:setserveroutputondeclarenumber1number:=80;number2number:=90;inumber:=0;beginloopnumber1:=number1+1;i:=i+1;exitwhennumber1=number2;endloop;dbms_output.put_line('共循环次数:'||to_char(i));end;3)while…loop…endloopwhile条件loop循环体endloop;示例:setserveroutputondeclarenumber1number:=80;number2number:=90;inumber:=0;beginwhilenumber1number2loopnumber1:=number1+1;i:=i+1;endloop;dbms_output.put_line('共循环次数:'||to_char(i));end;4)for…in..loop…endloopfor循环变量in循环下界…循环上界loop循环体endloop;示例:setserveroutputondeclarenumber1number:=80;number2number:=90;inumber:=0;beginforiin1..10loopnumber1:=number1+1;endloop;dbms_output.put_line('number1='||to_char(number1));end;事务为什么需要事务?什么是事务?事务是一种机制、是一个操作序列,它包含了一组数据库操作命令,并且所有命令作为一个整体一起向系统提交或撤销操作请求,即这一组数据库命令要么都执行,要么都不执行,因此事务是一个不可分割的工作逻辑单元,在数据库系统上执行并发操作时事务是作为最小的控制单元来使用的。事务是指一个工作单元,该单元可以包含多个步骤来完成所需的任务。一个事务作为一个整体,要么成功,要么失败。如果某一事务成功,则在该事务中进行的所有数据更改均会提交,成为数据库中的永久组成部分;如果事务遇到错误且必须取消或回滚,则所有数据更改均被清除。事务的属性:事务是作为单个逻辑工作单元执行的一系列操作。一个逻辑工作单元必须有四个属性,即原子性Atomicity,一致性Consistency,隔离性Isolation以及持久性Durability,通常简称为ACID.1)原子性:事务是一个完整的操作,其中的各元素是不可分的。事务中的所有元素必须作为一个整体提交或回滚。如果事务中的任何元素失败,则整个事务将失败。2)一致性:当事务完成时,数据必须处于一致状态。也就是说,在事务开始前,数据存储中的数据处于一致状态。在正在进行的事务中,数据可能处于不一致的状态。然而,当事务成功完成时,数据必须再次回到已知的一致状态。通过事务对数据所做的修改不能毁坏数据,或者说事务不能使数据存储处于不稳定的状态。3)隔离性:对数据进行修改的所有并发事务是彼此隔离的。也就是说事务是独立的,它不能以任何方式依赖于或影响其它事务。4)持久性:事务完成之后,它对于系统的影响是持久的。该修改即使出现系统故障也将一直保持。Oracle中的事务1)Commit命令该命令用于提交并结束事务处理。只有使用commit命令,才可对数据库执行永久性的事务更改。它的语法是:commitwork;或者commit;2)Savepoin
本文标题:Oracle(培训班带出来)
链接地址:https://www.777doc.com/doc-9040 .html