已阅读5页,还剩36页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
PL/SQL简介,OracleSQL和PL/SQL编程,目标,解释使用PL/SQL块与使用一些SQL语句相比的好处识别PL/SQL块的各个部分并说明他们的内容识别PL/SQL块的必需部分和可选部分说明如何执行PL/SQL块解释变量的用途解释常量与变量之间的区别识别有效的变量名称列出PL/SQL变量的有效数据类型为PL/SQL变量指定一种动态数据类型初始化PL/SQL变量在PL/SQL块中使用DML语句,内容,PL/SQL的优点PL/SQL块基本结构PL/SQL块声明部分PL/SQL块可执行部分PL/SQL注释,PL/SQL的优点,在通过网络执行一个SQL语句来访问Oracle数据库时,会将各个语句都发送到服务器,进行处理,然后执行它们,向用户返回结果(或一个消息)。每一个SQL语句都最少需要在网络中两次经过“旅行”,一次是从用户到服务器,另一次是从服务器到用户。这会产生大量网络数据流量。在过程语言SQL(ProcedureLanguageSQL,PL/SQL)程序嵌入SQL语句是取代执行多个SQL语句的另一种方法。PL/SQL扩展了SQL的功能。具有如下优点:允许用户包括异常处理和控制结构,从而允许更高的灵活性和效率。对经常执行的任务,可以存储PL/SQL块并由各种应用程序(或者用户)使用。,内容,PL/SQL的优点PL/SQL块基本结构PL/SQL块声明部分PL/SQL块可执行部分PL/SQL注释,基本结构,一个PL/SQL代码单元就称为一个“块”。各个PL/SQL块都可以划分为三部分:声明,可执行,异常处理。在这三部分中,“可执行部分是每一个PL/SQL程序中唯一的必需部分”。声明和异常处理部分是可选的,DECLARE声明部分,声明语句块中使用的变量或常量BEGIN可执行部分EXCEPTION异常处理部分END;语句块结束,基本结构,声明部分:如果在块中使用了任何变量或常量,那么必需首先在这个部分指出它们。可执行部分:这一部分可能包括SQL语句和(或)PL/SQL语句。SQL语句和PL/SQL语句之间的主要区别是SQL语句用来访问或处理数据库表中的数据,而PL/SQL语句主要处理PL/SQL块中包含的数据。异常处理部分:用来在执行块的过程中出现了错误时显示消息或者指出应该执行的其他操作。这个异常处理部分不是用来解决在编译块时发现的语法错误,它处理在执行语句的过程中发生的错误。END语句结束:END关键字后面有一个分号。分号用来结束PL/SQL块中的各个语句。,基本结构,示例:编写PL/SQL块,检索BOOKS表中的一本书名和零售价,然后将价格增加20%,显示这本书新的零售价和书名。,DECLAREc_rateincreaseCONSTANTNUMBER(3,2):=1.2;v_titleVARCHAR2(30);v_retailbooks.retail%TYPE;v_newretailNUMBER(5,2);BEGINSELECTtitle,retail,retail*c_rateincreaseINTOv_title,v_retail,v_newretailFROMbooksWHEREisbn=1059831198;DBMS_OUTPUT.PUT_LINE(Thenewpricefor|v_title|is$|v_newretail);END;,基本结构,分析示例:PL/SQL块的声明部分包括一个常量(c_)和三个变量(v_)。可执行部分使用一个SELECT语句来检索两个不同列(Title和Retail)的内容,并将这些值存储到(INTO)在声明部分指出的变量中。注意,在SELECT子句中对Retail列执行力算术运算,以便确定这本书的新价格。零售价将乘以存储在c_rateincrease变量(它的值实际上是1.20或者120%)中的数量。在将储在声明的变量中之后,就可以使用DBMS_OUTPUT程序包(DBMS_OUTPUT.PUT_LINE)的PUT_LINE函数显示它们。与以前在SQL*Plus中执行的SELECT命令不同,PL/SQL块在默认情况下不会显示SELECT语句的结果。DBMS_OUTPUT是一个包含一组函数的程序包,用户可以应用这些函数来显示为变量指定的值。使用DBMS_OUTPUT.PUT_LINE显示信息之前,需要在SQL提示符下键入SETSERVEROUTPUTON,SERVEROUTPUT环境变量指出分配一个缓冲区来存储PL/SQL块的输出。ON可以创建缓冲区。,基本结构,结果中,在声明部分,各个变量声明都是以分号结尾。在可执行部分,各个完整的语句也是以分号结尾的。虽然SELECT语句出现在多行上,但是Oracle将SELECT关键字和下一个分号之间的所有内容都视为一个语句。END关键字指出这个块的结束,后面跟一个分号。一个PL/SQL块可能会包含多个分号,那么Oracle如何知道何时应该执行这个块?在SQL*Plus中,用户只需在SQL提示符上或者在一个空行上输入一条斜线(/)就会执行这个块。,内容,PL/SQL的优点PL/SQL块基本结构PL/SQL块声明部分PL/SQL块可执行部分PL/SQL注释,声明部分,PL/SQL块声明部分定义了在块中使用的变量。至少必须为各个变量指定一个名称并指出变量所能包含的数据类型。此外,还可以在声明部分初始化变量。在“初始化”一个变量时,将为它指定一个值。除非将这个变量定义为一个常量,否则可能会在PL/SQL块中某个位置更改最初指定的值。,VariablenameCONSTANTdatatypeNOTNULL:=|DEFAULTvalue_or_expression;,声明变量语法格式:,声明部分变量名称,变量名称最多可以包括30个字符、数字或特殊符号。这个名称必须以一个字符开始。变量名称不应该与在这个块中引用的列名称相同。下表是各种变量的标准命名约定,声明部分常量,前面示例中,通过在声明部分声明一个常量,然后在执行计算的任何位置使用这个变量名称,用户只需要更新一次这个比例即可,而不必在整个表中多次更新比例。用户可以使用可选的CONSTANT关键字来指定一个常量。在将一个变量声明为常量时,必须指定一个值,否则Oracle服务器将返回一个错误消息。,声明部分PL/SQL数据类型,PL/SQL变量可以划分为4中数据类型:1.标量(Scalar)2.复合(Composite)3.引用(参照Reference)4.大对象(LargeObject,LOB),声明部分PL/SQL数据类型,RECORDTABLEVARRAY,REFCURSORREFobjec_type,BFILEBLOBCLOBNCLOB,BINARY_DOUBLEBINARY_FLOATBINARY_INTEGERBECBECIMALDOUBLEPRECISIONFLOATINTINTEGERNATURALNATURALNNUMBERNUMBERICPLS_INTEGERPOSITIVEREALSIGNTYPESMALLINT,CHARCHARACTERLONGLONGRAWNCHARNVARCHAR2RAWROWIDSTRINGUROWIDVARCHARVARCHAR2,BOOLEAN,DATE,标量类型,复合类型,引用类型,LOB类型,数字,字符,布尔,日期,声明部分PL/SQL数据类型,标量数据类型可以用来存储一个单独的值,它包括的数据类型与用于数据库表的列的数据类型相同。此外,PL/SQL还包括一种布尔数据类型(为其指定的值可以是TURE,FALSE或NULL)以及用于整数的数据类型(BINARY_INTEGER和PLS_INTEGER)。注意:Oracle的SQL中没有布尔数据类型,所以不能使用DML语句为表中的列指定布尔变量的值(TURE、FALSE或NULL)。,声明部分PL/SQL数据类型,常用标量数据类型,声明部分PL/SQL数据类型,常用标量数据类型,声明部分PL/SQL数据类型,复合数据类型是可以组合在一起并被视为一个单元的数据集合。它可以用来确定表中一个整行的结构,而不必定义各个单独的列。引用数据类型存储指向其他程序项目的指针大对象(LOB)数据类型用来存储指定大对象(例如映像)位置的定位器。,声明部分PL/SQL数据类型,不同标量数据类型的声明的例子,声明部分PL/SQL数据类型,%TYPE属性可以用来指定与同一个块中声明的另一个变量或数据库表中的一列相同的数据类型。要想将一个变量的数据类型声明为与同一个块中声明的另一个变量相同,只需要在%TYPE属性前面添加这个变量的名称即可。许多情况下,当你声明一个用于PL/SQL块的变量时,是为了使用这个变量来包含当前存储在表的一列中的某个值。在这种情况下,你必须确保数据类型是相同的。可以使用%TYPE属性来复制所引用列的定义。例如,假设你不记得BOOKS表的Title列中可以存储多少个字符,或者记不起已经将其定义为存储VARCHAR2还是CHAR数据,可以使用books.title%TYPE但是,如果数据库表的列具有一个NOTNULL值约束,那么在PL/SQL块中不会实现这个约束。,声明部分PL/SQL数据类型,NOTNULL约束要想确保变量总是包括一个值,可以在声明它时为其指定一个NOTNULL约束。要想为变量指定一个NOTNULL约束,只需要在声明这个变量时在数据类型之后包括关键字NOTNULL即可。如果将这个变量定义为NOTNULL,那么,必须为其指定一个值或者初始化它,否则在执行块时将返回一个出错消息。,声明部分PL/SQL数据类型,初始化变量可以使用DEFAULT关键字或者PL/SQL“赋值运算符”(:=)来初始化变量,或者说为其指定一个初始值。在声明变量时,必须初始化具有NOTNULL约束的任何变量。对于使用非数字数据类型声明的变量,初始化使用的值也必须包括在单引号中。,声明部分PL/SQL数据类型,初始化变量使用赋值运算符(:=)和DEFAULT关键字进行初始化的例子,内容,PL/SQL的优点PL/SQL块基本结构PL/SQL块声明部分PL/SQL块可执行部分PL/SQL注释,可执行部分,一个块的可执行部分是由BEGIN关键字标识的。可执行部分是PL/SQL块的唯一一个必需部分,它包含在执行块本身时执行的SQL语句和PL/SQL语句。可以在PL/SQL块中执行的SQL语句类型与可以在SQL提示符上执行的SQL语句几乎完全相同。主要区别在于SELECT语句的语法。,可执行部分,SELECT语句在PL/SQL块中可以包括SELECT来检索数据库表中的数据。如下图所示:,可执行部分,SELECT语句在PL/SQL块中使用SELECT语句时,必须对标准SQLSELECT语句的语法进行少量修改。PL/SQL中的SELECT语句语法,SELECTcolumnname,columnname,INTOvariablename,variablename,FROMtablenameWHEREcondition;,可执行部分,SELECT语句在执行SQL语句时,Oracle服务器将分配一个内存区域,它不仅存储这个语句,还存储语句的结果。这个内存区域称为“游标”。存在两种游标:隐式游标和显示游标。在使用DML语句或者只返回一行结果的SELECT语句时,Oracle服务器将创建一个“隐式游标”。隐式游标是自动的,不需要用户的任何干预。“显示游标”必须由用户来创建和管理。后面内容会讲解。因为必须将PL/SQL块中的SELECT语句检索到的数据放在一个隐式游标中,所以使用了INTO子句来指出存储所检索数据的变量(即隐式游标中的区域)。这些变量是在块的声明部分创建的。数据库表中的列名称是在这个语句的SELECT子句中列出的。INTO子句指出隐式游标中包含的变量。要想正确执行,必须以相同的顺序列出SELECT子句中的列名称和变量名称。FROM子句指定了包含所引用数据的表。注意:语法格式中SELECTINTO命令只允许查询返回一行。在使用隐式游标时,SELECTINTO语句只能返回一行结果。所以使用了WHERE子句来限制结果只有一行。PL/SQL块可以使用一个显示游标来检索多行结果,后面内容讲解。,可执行部分,PL/SQL中的DML语句PL/SQL块中不能使用DDL语句,可以使用DML语句来添加、更新和删除存储在表中的数据。INSERT、UPDATE和DELETE命令的语法与SQL中相同。例子:编写PL/SQL,向PUBLISHER表添加一个新的出版社。,BEGININSERTINTOpublisherVALUES(6,ANEWPUBLISHER,JAYEWRIGHT,800-555-3591);COMMIT;END;,可执行部分,PL/SQL中的DML语句例子结果,例子中不需要使用任何变量,所以省略了PL/SQL块中的声明部分COMMIT命令确保在执行了INSERT命令之后,其他用户可以立即使用,可执行部分,PL/SQL中的DML语句更新信息例子:更新出版社联系人姓名,将Jaye更改为Jay,BEGINUPDATEpublisherSETcontact=JAYWRIGHTWHEREpubid=6;COMMIT;END;,可执行部分,PL/SQL中的DML语句更新信息例子结果,可执行部分,PL/SQL中的DML语句删除信息例子:从publisher表中删除出版社6的信息,BEGINDELETEFROMpublisherWHEREpubid=6;COMMIT;END;,可执行部分,PL/SQL中的DML语句删除信息例子结果,内容,PL/SQL的优点PL/SQL块基本结构PL/SQL块声明部分PL/SQL块可执行部分PL/SQL注释,注释,在PL/SQL里,可以使用两种符号来写注释,即:使用双-(减号)加注释:PL/SQL允许用来写注释,它的作用范围是只能在一行有效。使用/*/来加一行或多行注释,如:,v_retailN
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 云南临沧永德县纪委监委公益性岗位人员招聘笔试参考题库附带答案详解
- 2026福建厦门市厦钨新能全球校园招聘笔试历年难易错考点试卷带答案解析
- 2026国科长三角资本校园招聘笔试参考题库附带答案详解
- 2026“天之骄纸创未来中国纸业等你来”中国纸业浆纸平台校园招聘95人笔试参考题库附带答案详解
- 2025青岛海湾集团有限公司招聘笔试历年备考题库附带答案详解
- 2025重庆日报编辑部招聘笔试参考题库附带答案详解
- 2025重庆国际人才交流大会涪陵区国有企业招聘控制数工作人员15人笔试参考题库附带答案详解
- 2025西安兴蓉环境发展有限责任公司招聘(7人)笔试历年典型考点题库附带答案详解
- 2025福建福州首邑文化旅游投资有限公司第一批招聘3人笔试历年难易错考点试卷带答案解析2套试卷
- 2025福建省平潭县粮食收储有限公司招聘3人笔试历年典型考点题库附带答案详解
- 支付机构外包服务合作相关制度
- 马年猜猜乐(猜美食)打印版
- 2025 学年第一学期上海市杨浦区初三语文期末质量调研试卷附答案解析
- DLT 2172-2020 火力发电厂节能指标分析体系
- 企业信息系统操作权限管理规范
- 铁路固资管理办法
- 2025年保险从业资格偿付能力测试
- 排涝泵站水泵检修方案(3篇)
- 中小学、幼儿园食堂大宗食材采购服务方案投标文件(技术方案)
- 中国汽车弹簧行业发展趋势及发展前景研究报告2025-2028版
- 《旅游消费者行为》教材笔记
评论
0/150
提交评论