《lsql--清华大学计算中心oracle培训资料》由会员分享,可在线阅读,更多相关《lsql--清华大学计算中心oracle培训资料(28页珍藏版)》请在金锄头文库上搜索。
1、Oracle9i PL/SQL程序设计,Procedural Language,PL/SQL程序设计,2,PL/SQL 概述,PL/SQL是Oracle对关系数据库语言SQL的过程化扩充,它将数据库技术和过程化程序设计语言联系起来,是一种应用开发语言,可使用循环,分支处理数据,将SQL的数据操纵功能与过程化语言数据处理功能结合起来. PL/SQL的使用,使SQL成为一种高级程序设计语言,支持高级语言的块操作,条件判断,循环语句,嵌套等,与数据库核心的数据类型集成,使SQL 的程序设计效率更高. PL/SQL是一种块结构语言,构成PL/SQL的基本单位是逻辑块,块中可以嵌套子块,以块为单位向Or
2、acle Server传递数据执行,其块结构如下: DECLARE BEGIN EXCEPTION END;,说明部分:说明变量及常量,执行部分:使用SQL的DML语言事务处理,例外处理:处理错误及警告信息,逻 辑 块 结 束,PL/SQL程序设计,3,PL/SQL语言的特点,PL/SQL中可以定义变量,变量有其作用范围 PL/SQL是以块的方式设计,块中可以嵌套子块,子块可以位于块中任何部分 子块可以是PL/SQL中的一条命令 PL/SQL中可以使用条件判断,循环,游标等高级语言程序设计方法 模块式的过程化语言,以块为单位执行 使用PL/SQL可以优化程序设计,得到更好的性能 (例如,执行
3、10个SQL语句,需要访问10次 Oracle核心,如果10个SQL组成一个PL/SQL程序,则只需访问一次Oracle 核心,将结果一次返回给用户,则程序执行效率高,节省时间,降低通信量),PL/SQL程序设计,4,减少对于Oracle核心的访问,降低网络负责 数据库数据类型集成 PL/SQL支持全部的SQL数据类型,这些共享的数据类型与SQL所提供的直接存取相结合,使PL/SQL与Oracle数 据字典结合成一体. PL/SQL与Oracle RDBMS集成在一起,可以使用PL/SQL 的集成数据类型,使变量的数据类型在数据库的操作中实 时确定.,PL/SQL语言的特点,PL/SQL程序设
4、计,5,PL/SQL与SQL语言结合,PL/SQL语句含有SQL的DML语句,检索及事务处理 PL/SQL中可以使用的SQL语句如下: INSERT UPDATE DELETE SELECT INTO COMMIT ROLLBACK SAVEPOINT 支持 RDBMS 的所有数据类型 对于SQL的数据类型进行了扩充,增加了新的数据类型,使 PL/SQL所支持的数据类型更灵活. Oracle RDBMS 对于PL/SQL中引用的表名,列名进行语句检查 对于SQL语句的执行结果,PL/SQL提供返回信息检查,通过 PL/SQL的例外处理,记录SQL的执行结果.,PL/SQL程序设计,6,PL/S
5、QL基础,变量的使用 和其他高级语言一样,在PL/SQL中可以使用变 量 注释 单行注释: - 多行注释: /* */ 数据类型 日期型 Date 字符型 CHAR,VARCHAR2 数字型 NUMBER 布尔型 BOOLEAN(TRUE,FALSE,NULL),数据类型,PL/SQL数据类型扩展,数字型 NUMBER 存储整型及实型数据,可以定义精度和取值范围 BINARY_INTEGER 可存储带符号整数,为整数计算优化性能 DEC NUMBER的子类型,存储实型数据 DOUBLE PRECISION NUMBER的子类型,高精度实数 INTEGER NUMBER的子类型,整数 INT N
6、UMBER的子类型,整数,PL/SQL数据类型扩展,数字型 SMALLINT NUMBER的子类型,取值范围比INTEGER小 NUMERIC NUMBER的子类型,与NUMBER等价 REAL NUMBER的子类型,存储实型数据,PL/SQL数据类型扩展,字符型 VARCHAR2 存放可变长字符串,有最大长度限制 CHAR 字符型,固定长度 LONG 长字符型 CLOB 大对象字符(Oracle8、Oracle8i) 日期型 Date 存储日期数据,PL/SQL数据类型扩展,布尔型 BOOLEAN 结果是TRUE或FALSE 二进制数据 RAW 存储多媒体数据,如图象、声音、视频等 BLOB
7、 大对象如图象、声音、视频等(Oracle8、Oracle8i),PL/SQL程序设计,11,PL/SQL基础,数据定义 标示符 数据类型 ; 标示符 数据类型 := PL/SQL表达式; 例如, v_salary number(7,2); v_ename varchar2(20) :=SMITH;,PL/SQL程序设计,12,PL/SQL基础,变量赋值 变量名 := 值; v_salary := 890.76; v_date :=25-MAR-99; Available_now :=FALSE; %TYPE类型 Credit Real(7,2); Debit Credit%TYPE; My_
8、name Employee.ename%TYPE; %TYPE 属性 + 不必知道My_name的真正数据类型 + 当数据库中列ename列定义改变时,数 据库运行时自动修改 %ROWTYPE: 行类型,PL/SQL程序设计,13,PL/SQL基础,PL/SQL 的记录类型 把逻辑相关的数据作为一个单元存储起来,在 Declare 段中定义record类型数据,使某一 变量使用该record型数据 定义方法:TYPE r_record is RECORD ( v_name emp.ename%TYPE, v_job emp.job%TYPE, v_sal emp.sal%TYPE); 变量定义
9、 r_emp r_record; 变量使用 SELECT ename,job,sal INTO r_emp FROM emp WHERE empno=7934; 则,r_emp.v_ename,r_emp.v_job,r_emp.v_sal 已有 值; 给变量赋值: r_employee r_record; r_employee.v_ename :=JACK; r_employee.v_job :=CLERK; r_employee.v_sal := 890.98;,PL/SQL程序设计,PL/SQL程序设计,14,PL/SQL基础,TABLE类型数据 PL/SQL中的表(table)类型类似
10、于语言中的 结构类型数组 定义方法:TYPE table_emp IS TABLE OF emp.ename %TYPE INDEX BY BINARY_INTEGER; 一个PL/SQL表有两个列,(key,value),key列类型即是 BINARY_INTEGER,而value类型则是所定义的数据类型 Table类型使用: 定义变量 my_name为 table_emp 类型,则可以使用变量 my_name ,也可以在SQL语句中使用 table类型变量 my_name table_emp; my_name(0) :=SCOTT; my_name(1) :=SMITH; my_name(
11、2) :=SUSAN; SELECT ename INTO my_name(10) FROM emp WHERE empno = 7934;,PL/SQL程序设计,15,在PL/SQL中使用SQL,INSERT语句的使用 Declare v_empno EMP.empno%TYPE :=1234; v_ename EMP.ename%TYPE :=SCOTT; v_job VARCHAR2(15) :=MANAGER; v_deptno EMP.deptno%TYPE :=20; v_sal NUMBER(7,2) :=890.50; Begin INSERT INTO emp(empno,e
12、name,job,hiredate,sal,deptno) VALUES(v_empno,v_ename,v_job,SYSDATE,v_sal,v_deptno); END; /,注意:非空(NOT NULL) 必须有值,NOT NULL,PL/SQL程序设计,16,PL/SQL中使用SQL,DELETE 语句的使用 Declare v_empno EMP.empno%TYPE :=1234; Begin DELETE FROM emp WHERE empno=v_empno; End; 事务处理语句的使用 在PL/SQL中可以使用SQL的 COMMIT,ROLLBACK及 SAVEPOIN
13、T语句 Declare v_empno EMP.empno%TYPE :=1234; Begin DELETE FROM emp WHERE empno=v_empno; COMMIT; End; /,PL/SQL程序设计,条件控制语句,IF-THEN语句 IF 条件成立 THEN 可执行语句; END IF;,条件控制语句,IF-THEN-ELSE语句 IF 条件成立 THEN 执行语句1; ELSE 执行语句2; END IF;,条件控制语句,IF-THEN-ELSIF语句 IF 条件1成立 THEN 执行语句1; ELSIF 条件2成立 THEN 执行语句2; ELSIF 条件3成立 T
14、HEN 执行语句3; . END IF;,循环语句,基本循环 LOOP 执行语句; EXIT WHEN 条件成立; END LOOP;,循环语句,WHILE循环 WHILE 条件成立 LOOP 执行语句; END LOOP;,循环语句,FOR循环 FOR 计数器 IN 低界高界 LOOP 执行语句; END LOOP;,PL/SQL程序设计,23,光标(CURSOR)设计,什么是光标 光标使用 光标说明 :在Declare 段中命名光标,将光标与一查询语句联系起来. 语法: CURSOR 光标名(参数) IS SELECT 字句; 打开光标 获取活动集中的行 FETCH语句检索活动集中的行,每次一行,每执行一次FECTCH,光标前进到活动集中的下一行。 光标下移 关闭光标