1 / 35

第十一章 PL/SQL 程序设计基础

第十一章 PL/SQL 程序设计基础. 11.1 PL/SQL 程序概述. PL/SQL 是 Procedure Language & Structured Query Language 的缩写。 Oracle 的 SQL 是支持 ANSI(American national Standards Institute) 和 ISO92(International Standards Organization) 标准的产品。 PL/SQL 是对 SQL 语言存储过程语言的扩展。从 Oracle6 以后, Oracle 的 RDBMS 附带了 PL/SQL 。

kane
Download Presentation

第十一章 PL/SQL 程序设计基础

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 第十一章 PL/SQL 程序设计基础 辽宁工程技术大学 软件工程系

  2. 11.1 PL/SQL程序概述 • PL/SQL是 Procedure Language & Structured Query Language 的缩写。 • Oracle的SQL是支持ANSI(American national Standards Institute)和ISO92(International Standards Organization)标准的产品。 • PL/SQL是对SQL语言存储过程语言的扩展。从Oracle6以后,Oracle的RDBMS附带了PL/SQL。 • 它现在已经成为一种过程处理语言,简称PL/SQL(发音:pea ell sequel)。 辽宁工程技术大学 软件工程系

  3. 11.1 PL/SQL程序概述 • PL/SQL是Oracle系统的核心语言,现在Oracle的许多部件都是由PL/SQL写成。在PL/SQL中可以使用的SQL语句有: • INSERT • UPDATE • DELETE • SELECT INTO • COMMIT • ROLLBACK • SAVEPOINT 辽宁工程技术大学 软件工程系

  4. 11.1 PL/SQL程序概述 • 提示: • 在 PL/SQL中只能用 SQL语句中的 DML 部分,不能用 DDL 部分,如果要在PL/SQL中使用DDL(如Create table 等)的话,只能以动态的方式来使用。 • 在 PL/SQL中只能用 SQL语句中的SELECT 部分,但是,要加上INTO子句,而且结果要唯一,否则,要使用游标。 辽宁工程技术大学 软件工程系

  5. 11.2 PL/SQL块结构 • PL/SQL程序由三个块组成,即 声明部分、执行部分、异常处理部分。PL/SQL块的结构如下: • Declare /* 声明部分: 在此 声明PL/SQL用到的变量,类型及光标 */ • begin /* 执行部分: 过程及SQL 语句 , 即程序的主要部分 */ • Exception /* 执行异常部分: 错误处理 */ • End; • 其中 执行部分是必须的 辽宁工程技术大学 软件工程系

  6. 11.1 PL/SQL程序概述 • 块可以分为四类: • 无名块:动态构造,只能执行一次。 • 命名块:加了标号的块。 • 子程序:存储在数据库中的存储过程、函数及包等。当在数据库上建立好后可以在其它程序中调用它们。 • 触发器:当数据库发生操作时,会触发一些事件,从而自动执行相应的程序。 辽宁工程技术大学 软件工程系

  7. 11.3 标识符 • 标识符名不能超过30字符; • 第一个字符必须为字母; • 不分大小写; • 不能用’-‘(减号); • 不能是SQL保留字。 辽宁工程技术大学 软件工程系

  8. 11.3 标识符 • 不合法的标识符: • declare • v-name varchar2(20); /* 存放name 列的值 */ • 2001_sal number(9,2); /* 存放 sal 列的值 */ • mine&yours number; -- 非法的标识符 • debit-amount number(10,4) ; -- 非法的标识符 • on/off char(1); -- 非法的标识符 • user id varchar2(20); -- 非法的标识符(不能用空格) • 提示: 一般不要把变量名声明与表中字段名完全一样,如果这样可能得到不正确的结果。 辽宁工程技术大学 软件工程系

  9. 11.3 标识符 表11-1 建议的表示符命名方法 辽宁工程技术大学 软件工程系

  10. 11.4 PL/SQL 变量类型 辽宁工程技术大学 软件工程系

  11. 11.4 PL/SQL 变量类型 • 使用%ROWTYPE • PL/SQL 可以声明与数据库行有相同类型的记录。 • 例: --节选自在线tabrec.sql DECLARE TYPE t_studenttable is TABLE OF students%ROWTYPE /* v_students 的每一元素是一个记录 */ v_students t_studentstable; Begin /* 将结果存到数组变量中 */ select * into v_students(10001) from students where id=10001; end; 辽宁工程技术大学 软件工程系

  12. 11.4 PL/SQL 变量类型 • LOB类型 • Oracle提供了LOB (Large OBject)类型,用于存储大的数据对象的类型。Oracle目前主要支持BFILE, BLOB, CLOB 及 NCLOB 类型。 • BFILE • 存放大的二进制数据对象,这些数据文件不放在数据库里,而是放在操作系统的某个目录里,数据库的表里只存放文件的目录。 • BLOB • 存储大的二进制数据类型。每个变量存储大的二进制对象的位置。大二进制的大小<=4GB。 • CLOB • 存储大的字符数据类型。每个变量存储大字符对象的位置,该位置指到大字符数据块。大字符的大小<=4GB。 • NCLOB • 存储大的NCHAR字符数据类型。每个变量存储大字符对象的位置,该位置指到大字符数据块。大字符的大小<=4GB。 辽宁工程技术大学 软件工程系

  13. 11.5 运算符 辽宁工程技术大学 软件工程系

  14. 11.6 变量赋值 • 在PL/SQL编程中,变量赋值是一个值得注意的地方,它的语法如下: variable := expression ; 辽宁工程技术大学 软件工程系

  15. 11.6 变量赋值 • 字符及数字运算特点 1、空值加数字仍是空值 null + < 数字> = null 2、空值加(连接)字符,结果为字符 null || <字符串> = < 字符串> 3、布尔值不仅有TRUE, FALSE,还有NULL,共三个值 辽宁工程技术大学 软件工程系

  16. 11.6 变量赋值 • 例如: DECLARE done BOOLEAN; the following statements are legal: BEGIN done := FALSE; WHILE NOT done LOOP ... END LOOP; 辽宁工程技术大学 软件工程系

  17. 11.6 变量赋值 • 数据库数据的赋值 数据库赋值是通过 select 语句来完成的。每执行select 语句一次只能赋值一次。一般要求被赋值的变量与select 中的列名要一一对应。 辽宁工程技术大学 软件工程系

  18. 11.6 变量赋值 • 示例: DECLARE emp_id emp.empno%TYPE; emp_name emp.ename%TYPE; wages NUMBER(7,2); BEGIN ... SELECT ename, sal + comm INTO emp_name, wages FROM emp WHERE empno = emp_id; ... END; 辽宁工程技术大学 软件工程系

  19. 11.7 条件语句 IF <布尔表达式> THEN PL/SQL 和 SQL语句 ELSIF < 其它布尔表达式> THEN 其它语句 END IF; 辽宁工程技术大学 软件工程系

  20. 11.8 循环 • 象其它高级语言一样,PL/SQL的循环结构也有当型循环和直到型循环两种基本形式,它的结构主要有三种,即:LOOP 循环、WHILE循环、FOR循环。 • 1. 简单循环 LOOP 要执行的语句; END LOOP; 辽宁工程技术大学 软件工程系

  21. 11.8 循环 辽宁工程技术大学 软件工程系

  22. 11.8 循环 • 2. WHILE 循环 While <布尔表达式> LOOP 要执行的语句; END LOOP; 辽宁工程技术大学 软件工程系

  23. 11.8 循环 • FOR 循环 FOR 循环计数器 in 下限 .. 上限 LOOP 要执行的语句; END LOOP; 辽宁工程技术大学 软件工程系

  24. 11.9 注释 • 在PL/SQL里,可以使用两种符号来写注释,即: • 使用双 ‘-‘ ( 减号) 加注释 如: V_Sal number(12,2); -- 工资变量。 • 使用 /* */ 来加一行或多行注释 如: /***********************************************/ /* 文件名:stattistcs_sal.sql */ /* 功能:统计整个部门工资 */ /* 作者: 王哲元 */ /* 修改日期 :2001.07.03 */ /***********************************************/ 辽宁工程技术大学 软件工程系

  25. 11.10 DBMS_OUTPUT的使用 • PL/SQL本身没有提供任何输入功能,但 PL/SQL 2.0 以后的版本提供了内装包DBMS_OUTPUT输出功能 • DBMS_OUTPUT包属于 sys 帐户,但在创建时已将EXECUTE 权授予 PUBLIC,所以任何用户都可以直接使用而不加sys模式。 辽宁工程技术大学 软件工程系

  26. 11.10 DBMS_OUTPUT的使用 v_NumLines := 3; DBMS_OUTPUT.GET_LINES. DBMS_OUTPUT.GET_LINES(v_Data, v_NumLines); FOR v_Counter IN 1..v_NumLines LOOP INSERT INTO temp_table (char_col) VALUES (v_Data(v_Counter)); --DBMS_OUTPUT.PUT_LINE(v_data); END LOOP; END; / DECLARE /* Demonstrates using PUT_LINE and GET_LINE. */ v_Data DBMS_OUTPUT.CHARARR; v_NumLines NUMBER; BEGIN DBMS_OUTPUT.ENABLE(1000000); DBMS_OUTPUT.PUT_LINE('Line One'); DBMS_OUTPUT.PUT_LINE('Line Two'); DBMS_OUTPUT.PUT_LINE('Line Three'); 辽宁工程技术大学 软件工程系

  27. 辽宁工程技术大学 软件工程系

  28. 辽宁工程技术大学 软件工程系

  29. 辽宁工程技术大学 软件工程系

  30. 辽宁工程技术大学 软件工程系

  31. 辽宁工程技术大学 软件工程系

  32. 辽宁工程技术大学 软件工程系

  33. 辽宁工程技术大学 软件工程系

  34. 辽宁工程技术大学 软件工程系

  35. 辽宁工程技术大学 软件工程系

More Related