资源描述
单击此处编辑母版标题样式,*,*,*,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,PL/SQL,简介,Oracle SQL,和,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,(,Procedure,Language,SQL,,,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%,,显示这本书新的零售价和书名。,DECLARE,c_rateincrease CONSTANT NUMBER(3,2):=1.2;,v_title VARCHAR2(30);,v_retail books.retail%TYPE;,v_newretail NUMBER(5,2);,BEGIN,SELECT title,retail,retail*c_rateincrease,INTO v_title,v_retail,v_newretail,FROM books,WHERE isbn=1059831198;,DBMS_OUTPUT.PUT_LINE(The new price for|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,提示符下键入,SET SERVEROUTPUT ON,,,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,块中某个位置更改最初指定的值。,Variablename CONSTANT datatype NOT NULL,:=|DEFAULT value_or_expression;,声明变量语法格式:,声明部分,变量名称,变量名称最多可以包括,30,个字符、数字或特殊符号。这个名称必须以一个字符开始。,变量名称不应该与在这个块中引用的列名称相同。,下表是各种变量的标准命名约定,前缀,变量类型,c_,常量,在块执行过程中不会更改值的变量,g_,全局变量,宿主或调用环境引用的变量,这些变量通常与应用程序一起使用,v_,变量,在,PL/SQL,块中用来表示在块的执行过程中可能更改的值,声明部分,常量,前面示例中,通过在声明部分声明一个常量,然后在执行计算的任何位置使用这个变量名称,用户只需要更新一次这个比例即可,而不必在整个表中多次更新比例。,用户可以使用可选的,CONSTANT,关键字来指定一个常量。在将一个变量声明为常量时,必须指定一个值,否则,Oracle,服务器将返回一个错误消息。,声明部分,PL/SQL,数据类型,PL/SQL,变量可以划分为,4,中数据类型:,1.,标量(,Scalar,),2.,复合(,Composite,),3.,引用(参照,Reference,),4.,大对象(,Large,Object,LOB,),声明部分,PL/SQL,数据类型,RECORD,TABLE,VARRAY,REF CURSOR,REF objec_type,BFILE,BLOB,CLOB,NCLOB,BINARY_DOUBLE,BINARY_FLOAT,BINARY_INTEGER,BEC,BECIMAL,DOUBLE PRECISION,FLOAT,INT,INTEGER,NATURAL,NATURALN,NUMBER,NUMBERIC,PLS_INTEGER,POSITIVE,REAL,SIGNTYPE,SMALLINT,CHAR,CHARACTER,LONG,LONG RAW,NCHAR,NVARCHAR2,RAW,ROWID,STRING,UROWID,VARCHAR,VARCHAR2,BOOLEAN,DATE,标量类型,复合类型,引用类型,LOB,类型,数字,字符,布尔,日期,声明部分,PL/SQL,数据类型,标量数据类型,可以用来存储一个单独的值,它包括的数据类型与用于数据库表的列的数据类型相同。此外,,PL/SQL,还包括一种布尔数据类型,(为其指定的值可以是,TURE,,,FALSE,或,NULL,)以及用于整数的数据类型(,BINARY_INTEGER,和,PLS_INTEGER,)。,注意,:,Oracle,的,SQL,中,没有布尔数据类型,,所以不能使用,DML,语句为表中的列指定布尔变量的值(,TURE,、,FALSE,或,NULL,)。,声明部分,PL/SQL,数据类型,类型,说明,VARCHAR2(n),定义可变长度的字符串,其中,n,用于指定字符串的最大长度,其最大值,32767,字节。使用该数据类型定义变量时,必须要指定长度。,CHAR(n),定义固定长度的字符串,其中,n,用于指定字符串的最大长度,其最大值,32767,字节。使用该数据类型定义变量时,如果没有指定,n,,则其默认值为,1,。,NUMBER(p,s),定义固定长度的整数和浮点数,其中,p,表示精度,用于指定数字的总位数;,s,表示标度,用于指定小数点后的数字位数。例,,NUMBER(6,2),,整数的位数最大是,4,位。,DATE,定义日期和时间数据,其数据长度为固定长度(,7,字节)。当给,DATE,变量赋值时,数据必须要与日期格式和日期语言匹配。,TIMESTAMP,定义日期和时间数据。赋值方法与,DATE,的赋值方法相同。但当显示,TIMESTAMP,变量数据时,不仅会显示日期,而且还会显示时间和上下午标记。,常用标量数据类型,声明部分,PL/SQL,数据类型,类型,说明,LONG,和,LONG RAW,LONG,定义变长字符串,类似于,VARCHAR2,,但其字符串最大长度为,32760,字节;,LONG RAW,数据类型用于定义变长的二进制数据,但其字符串最大长度为,32760,字节。,BOOLEAN,定义布尔变量,其变量值为,TRUE,、,FALSE,或,NULL,,注意该类型是,PL/SQL,数据类型,表列不能采用该数据类型,BINARY_INTEGER,定义整数,数值范围,-2147483647,和,2147483647,之间。该类型是,PL/SQL,数据类型,表列不能采用该数据类型,BINARY_FLOAT,和,BINARY_DOUBLE,Oracle10g,新增数据类型,定义单精度的浮点数和双精度的浮点数,这两种类型用于高速的科学计算。,常用标量数据类型,声明部分,PL/SQL,数据类型,复合数据类型,是可以组合在一起并被视为一个单元的数据集合。它可以用来确定表中一个整行的结构,而不必定义各个单独的列。,引用数据类型,存储指向其他程序项目的指针,大对象(,LOB,)数据类型,用来存储指定大对象(例如映像)位置的定位器。,声明部分,PL/SQL,数据类型,不同标量数据类型的声明的例子,数据类型,例子,CHAR,v_region CHAR(2);,NUMBER,v_retail NUMBER(5,2);,BOOLEAN,v_instock BOOLEAN;,DATE,v_pubdate DATE;,VARCHAR2,v_title VARCHAR2(30);,BINARY_INTEGER,v_onhand BINARY_INTEGER;,PLS_INTEGER,v_backordered PLS_INTEGER;,%TYPE,v_region
展开阅读全文