《PLSQL基础》PPT课件.ppt
PL/SQL程序设计,2,PL/SQL基础,SQL:Structured Query LanguagePL/SQL:Procedural Language/SQL,3,PL/SQL实例,一个用PL/SQL编制的程序代码如下所示 DECLARE xm varchar2(8):=张琼;zym varchar2(10):=计算机;zxf number(2):=45;/*定义变量类型*/BEGIN UPDATE XS SET zxf=zxf WHERE xm=xm;/*更新学生表*/IF SQL%NOTFOUND THEN/*检查记录是否存在,如果不存在就插入记录*/INSERT INTO XS(XH,XM,ZYM,ZXF)VALUES(xs_sequence.NEXTVAL,xm,zym,zxf);END IF;END;,4,PL/SQL语句块,匿名语句块命名语句块1.标号语句块2.子程序(过程、函数)3.触发器,5,基本块结构,所有语句块都包含三个基本的部分:声明部分、执行部分和异常处理部分。只有执行部分是必需的,其他两个部分都是可选的。,6,基本块结构,DECLARE/*Declarative section is here*/BEGIN/*Executable section is here*/EXCEPTION/*Exception section is here*/END;,本语句块中使用的所有变量、游标和类型都放在声明部分。,语句块要完成的处理工作。,对执行过程中发生的错误进行处理。,7,DECLAREv_StudentID NUMBER(5):=10000;v_FirstName VARCHAR2(20);BEGIN-Retrieve first name of student with ID 10,000 SELECT first_name INTO v_FirstName FROM students WHERE id=v_StudentID;EXCEPTIONWHEN NO_DATA_FOUND THENINSERT INTO log_table(info)VALUES(Student 10,000 does not exist!);END;/(匿名程序块到上面一行结束,/执行本程序块),8,标识符,标识符用来命名PL/SQL对象,例如变量、游标、类型和子程序。标识符由字母开头,后面可跟随字母、数字、货币符号、下划线和“#”字符。PL/SQL标识符的最大长度为30个字符,不区分大小写。但是适当地使用大小写可以提高程序的可读性。,9,运算符,Oracle提供了三类运算符:算术运算符、关系运算符和逻辑运算符。1.算术运算符算术运算符执行算术运算。算术运算符有:+(加)、-(减)、*(乘)、/(除)*(指数)和(连接)。其中(加)和(减)运算符也可用于对DATE(日期)数据类型的值进行运算。例:求学生的年龄。SELECT(SYSDATECSSJ)AS 年龄FROM XS;其中:SYSDATE是当前系统时间,CSSJ是出生时间。,10,运算符,2.关系运算符关系运算符(又称比较运算符)有下面几种:(1)(等于)、或!=(不等于)、(大于)、=(大于等于)、=(小于等于);(2)BETWEENAND(检索两值之间的内容);(3)IN(检索匹配列表中的值);(4)LIKE(检索匹配字符样式的数据);(5)IS NULL(检索空数据)。关系运算符用于测试两个表达式值满足的关系,其运算结果为逻辑值TRUE、FALSE 及 UNKNOWN。,11,运算符,例:(1)查看计算机基础的平均成绩。SELECT AVG(CJ)FROM XS_KCWHERE KCH=101;(2)查询总学分在 4050的学生学号和姓名。SELECT XH,XM,ZXF FROM XS WHERE ZXF BETWEEN 40 AND 50;(3)使用=和=40 AND ZXF=50;,12,运算符,3.逻辑运算符逻辑运算符用于对某个条件进行测试,运算结果为 TRUE 或 FALSE。(1)AND(两个表达式为真则结果为真)(2)OR(只要有一个为真则结果为真)(3)NOT(取相反的逻辑值)【例5.3】(1)查询总学分不在 4050的学生学号和姓名。SELECT XH,XM,ZXF FROM XS WHERE ZXF NOT BETWEEN 40 AND 50;(2)查询总学分大于45的计算机系学生。SELECT XH,XM,ZXFFROM XSWHERE ZXF45 AND ZYM=计算机;(3)查询计算机系和通信工程系学生的基本情况。SELECT XH,XM,ZYM,ZXFFROM XSWHERE ZYM=计算机 OR ZYM=通信工程;,13,其他符号,PL/SQL为支持编程,还使用其他一些符号。下表列出了部分符号,它们是最常用的,也是使用PL/SQL的所有用户都必须了解的。,14,字符型文字,字符型文字是由单引号界定的一个或多个字符,如 123456、Four years ago.字符型文字可直接赋值给类型CHAR或VARCHAR2字符型文本中两个单引号表示一个单引号,如 Mikes string,15,数字型文本,数字型文本可以不经转换就直接赋值给NUMBER类型变量。如:123、-7、23.1、9.87E-3,16,布尔型文字,仅有三种可能的布尔型文字:TRUE、FALSE和NULL。这些取值可以被赋值给布尔型变量。布尔型文字表示条件的真或假,可以在IF和LOOP语句中使用。,17,注释,1.单行注释由两个连字符(-)开始。eg:v_Course;-Variable to hold the course number2.多行注释由/*开头,由*/结尾。eg:v_Course;/*Variable to hold the course number*/,18,变量声明,变量有名字及其数据类型两个属性。变量名用于标识该变量,变量的数据类型确定了该变量存放值的格式及允许的运算。声明语法variable_name type constant not null:=value;DECLAREv_DescriptionVARCHAR2(50);v_NumberSeatsNUMBER:=45;v_CounterBINARY_INTEGER:=0;,19,变量声明,变量声明为NOT NULL 的,必须要赋初始值。变量声明为CONSTANT的,必须要赋初始值。DECLAREv_TempVar NUMBER NOT NULL:=0;c_MiniStuID CONSTANT NUMBER(5):=10000;,20,PL/SQL类型,1.数字系列NUMBER(P,S)P:数值中所有数字位的个数S:小数点右边的数字位的个数(NUMBER等价于DECIMAL、FLOAT、REAL)例如:num_field NUMBER(10,2);num_field是一个整数部分最多使8位,小数部分最多是2的变量。,21,PL/SQL类型,2.字符系列VARCHA2(L)(VARCHAR 和 STRING 等价于 VARCHAR2)例如:var_field VARCHAR(11):=Hello world;,22,PL/SQL类型,3.日期/区间系列DATE存储世纪、年、月、日、小时、分和秒的信息。TIMESTAMP(P)可以存储秒字段的小数部分。,23,PL/SQL类型,4.布尔系列BOOLEAN其值为TRUE、FALSE和NULL之一。,24,PL/SQL类型,5.复合类型符合类型有记录、表和数组。6.引用类型引用类型只有一种:游标变量,25,PL/SQL类型,7.使用%TYPEDECLAREv_FirstName students.first_name%TYPE;通过使用”%TYPE”,v_FirstName的变量类型声明为 students表的first_name列的类型。使用%TYPE声明具有以下两个优点:不必知道XH列的确切的数据类型;如果改变了XH列的数据库定义,my_xh的数据类型在运行时会自动进行修改。,26,PL/SQL类型,8.%ROWTYPE可以使用%ROWTYPE属性声明描述表的行数据的记录,对于用户定义的记录,必须声明自己的域。记录包含唯一的命名域,具有不同的数据类型。DECLARE TYPE TimeRec IS RECORD(HH number(2),MM number(2);TYPE MeetingTyp IS RECORD(Meeting_Date date,Meeting_Time TimeRec,Meeting_Addr varchar2(20),Meeting_Purpose varchar2(50),27,变量的作用域,变量的作用域是指可以访问该变量的程序部分。对于PL/SQL变量来说,其作用域就是从变量的声明到语句块的结束。当变量超出了作用域时,PL/SQL解析程序就会自动释放该变量的存储空间。,28,对象类型,1、OEM定义2、命令定义语法格式:CREATE OR REPLEACE TYPE schema.type_nameAUTHID CURRENT_USER|DEFINER AS OBJECT(attribute1 datatype,attribute2 datatype,attributen datatype method1 method2 methodn,29,数据类型的转换,1.显示数据转换TO_CHAR(d,format)日期型-字符型TO_CHAR(num,format)数字型-字符型TO_DATE(string,format)字符型-日期型TO_NUMBER(string,format)字符型-数值型,30,数据类型的转换,2.隐式数据类型转换DECLAREv_CurrentCredits VARCHAR2(5);BEGINSELECT current_creditsINTO V_CurrentCredits FROM studentsWHERE id=10002;END;(current_credits字段是NUMBER(3)类型),31,数据类型的转换,2.隐式数据类型转换PL/SQL可以在下面的类型之间进行转换:字符和数字字符和日期尽管PL/SQL将在数据类型之间进行隐式转换,使用显示转换函数也是良好的程序设计风格。,32,表达式和运算符赋值,variable:=expression;变量名:=表达式;,DECLAREv_String1 VARCHAR2(10);v_String2 VARCHAR2(15);v_Numeric NUMBER;BEGINv_String1:=Hello;v_String2:=v_String1;v_Numeric:=-12.4;END;,33,表达式示例,1.字符表达式|用于字符串连接Hello|World|!等于 Hello World!,34,表达式,2.布尔表达式(45)OR(-1!=Z)Scott LIKE Sc%tScott LIKE Sc_ttScott LIKE%100 BETUEEN 110 AND 120Scott IN(Mike,Pamela,Fred),35,结果输出,如果要把信息显示在sqlplus上,调用DBMS_OUTPUT包的PUT_LINE函数。(先要执行 set serveroutput on 命令)set serveroutput on;dbms_output.put_line();,