《oraPLSQL基础》PPT课件.ppt_第1页
《oraPLSQL基础》PPT课件.ppt_第2页
《oraPLSQL基础》PPT课件.ppt_第3页
《oraPLSQL基础》PPT课件.ppt_第4页
《oraPLSQL基础》PPT课件.ppt_第5页
已阅读5页,还剩16页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第15章、PL/SQL基础,1,理解 PL/SQL 功能和特点 了解数据类型及其用法 理解逻辑比较 理解控制结构,2,本章目标,PL/SQL 是过程语言(Procedural Language)与结构化查询语言(SQL)结合而成的编程语言 PL/SQL 是对 SQL 的扩展 支持多种数据类型,如大对象和集合类型,可使用条件和循环等控制结构 可用于创建存储过程、触发器和程序包,给SQL语句的执行添加程序逻辑 与 Oracle 服务器和 Oracle 工具紧密集成,具备可移植性、灵活性和安全性,3,PL/SQL 简介,PL/SQL 的优点,4,支持 SQL,在 PL/SQL 中可以使用: 数据操纵命令 事务控制命令 游标控制 SQL 函数和 SQL 运算符 支持面向对象编程 (OOP) 可移植性,可运行在任何操作系统和平台上的Oralce 数据库 更佳的性能,PL/SQL 经过编译执行,用户将整个语句块发送给 Oracle,5,PL/SQL 的优点,与 SQL 紧密集成,简化数据处理。 支持所有 SQL 数据类型 支持 NULL 值 支持 %TYPE 和 %ROWTYPE 属性类型,安全性,可以通过存储过程限制用户对数据的访问,6,PL/SQL 的体系结构,PL/SQL 引擎驻留在 Oracle 服务器中 该引擎接受 PL/SQL 块并对其进行编译执行,将PL/SQL 块发送给 Oracle 服务器,用户,执行过程语句,引擎将 SQL 语句发送给SQL 语句执行器,执行 SQL 语句,将结果发送给用户,PL/SQL 块简介,7,PL/SQL 块是构成 PL/SQL 程序的基本单元 将逻辑上相关的声明和语句组合在一起 PL/SQL 分为三个部分,声明部分、可执行部分和异常处理部分 DECLARE declarations BEGIN executable statements EXCEPTION handlers END;,DECLARE qty_on_hand NUMBER(5); BEGIN SELECT quantity INTO qty_on_hand FROM Products WHERE product = 芭比娃娃 FOR UPDATE OF quantity; IF qty_on_hand 0 THEN UPDATE Products SET quantity = quantity + 1 WHERE product = 芭比娃娃; INSERT INTO purchase_record VALUES (已购买芭比娃娃, SYSDATE); END IF; COMMIT; EXCEPTION /* 异常处理语句 */ WHEN OTHERS THEN DBMS_OUTPUT.PUT_LINE(出错:| SQLERRM); END;,声明部分定义变量、游标和自定义异常,包含 SQL 和 PL/SQL 语句的可执行部分,指定出现错误时需要执行的操作,PL/SQL 块中可以使用变量和常量 在声明部分声明,使用前必须先声明 声明时必须指定数据类型,每行声明一个标识符 在可执行部分的 SQL 语句和过程语句中使用 声明变量和常量的语法:,8,变量和常量,identifier CONSTANT datatype(size) NOT NULL := | DEFAULT init_value;,给变量赋值有两种方法: 使用赋值语句 := 使用 SELECT INTO 语句,9,变量和常量,DECLARE icode VARCHAR2(6); p_catg VARCHAR2(20); p_rate NUMBER; c_rate CONSTANT NUMBER := 0.10; BEGIN . icode := i205; SELECT p_category, itemrate * c_rate INTO p_catg, p_rate FROM itemfile WHERE itemcode = icode; . END;,10,数据类型,PL/SQL 支持的内置数据类型,数据类型,LOB类型,标量类型,属性类型,%ROWTYPE,数字,字符,布尔型,日期时间,BFILE,BLOB,CLOB,NCLOB,%TYPE,提供某个变量或数据库表列的数据类型,提供表示表中一行的记录类型,存储非结构化数据块,用于引用数据库列的数据类型,以及表示表中一行的记录类型 属性类型有两种: %TYPE - 引用变量和数据库列的数据类型 %ROWTYPE - 提供表示表中一行的记录类型 使用属性类型的优点: 不需要知道被引用的表列的具体类型 如果被引用对象的数据类型发生改变,PL/SQL 变量的数据类型也随之改变,11,属性类型,icode itemfile.itemcode%TYPE; emp_rec scott.emp%ROWTYPE;,逻辑比较,12,布尔表达式的结果为TRUE、FALSE或NULL,通常由逻辑运算符AND、OR和NOT连接 布尔表达式有三种类型: 数字布尔型 字符布尔型 日期布尔型,逻辑比较用于比较变量和常量的值,这些表达式称为布尔表达式 布尔表达式由关系运算符与变量或常量组成,Select select column into variable From table where condition DML语句 动态SQL,13,执行SQL,14,控制结构,PL/SQL 支持的流程控制结构: 条件控制 IF 语句 CASE 语句 循环控制 LOOP 循环 WHILE 循环 FOR 循环 顺序控制 GOTO 语句 NULL 语句,IF 语句根据条件执行一系列语句,有三种形式:IF-THEN、IF-THEN-ELSE 和 IF-THEN-ELSIF,15,条件控制,DECLARE icode VARCHAR2(4); irate NUMBER; BEGIN icode := i203; SELECT itemrate INTO irate FROM itemfile WHERE itemcode = icode; IF irate 200 THEN UPDATE itemfile SET itemrate = itemrate - 200 WHERE itemcode = icode; ELSE UPDATE itemfile SET itemrate = itemrate - 50 WHERE itemcode = icode; END IF; DBMS_OUTPUT.PUT_LINE(itemrate=| irate); END;,条件控制,16,BEGIN CASE ,CASE 语句用于根据单个变量或表达式与多个值进行比较 执行 CASE 语句前,先计算选择器的值,循环控制,17,循环控制用于重复执行一系列语句 循环控制语句包括: LOOP、EXIT 和 EXIT WHEN 循环控制的三种类型: LOOP - 无条件循环 WHILE - 根据条件循环 FOR - 循环固定的次数,LOOP sequence_of_statements END LOOP;,WHILE condition LOOP sequence_of_statements END LOOP;,FOR counter IN REVERSE value1value2 LOOP sequence_of_statements END LOOP;,顺序控制,18,顺序控制用于按顺序执行语句 顺序控制语句包括: GOTO 语句 - 无条件地转到标签指定的语句 NULL 语句 - 什么也不做的空语句,DECLARE qtyhand itemfile.qty_hand%type; relevel itemfile.re_level%type; BEGIN SELECT qty_hand,re_level INTO qtyhand,relevel FROM itemfile WHERE itemcode = i201; IF qtyhand UPDATE itemfile SET qty_hand = qty_hand + re_level WHERE itemcode = i201; NULL; END;,动态 SQL 是指在PL/SQL程序执行时生成的 SQL 语句 编译程序对动态 SQL 不做处理,而是在程序运行时动态构造语句、对语句进行语法分析并执行 DDL 语句命令和会话控制语句不能在 PL/SQL 中直接使用,但是可以通过动态 SQL 来执行 执行动态 SQL 的语法: EXECUTE IMMEDIATE dynamic_sql_string INTO define_variable_list USING bind_argument_list;,19,动态 SQL,DECLARE sql_stmt VARCHAR2(200); emp_id NUMBER(4) := 7566; emp_rec emp%ROWTYPE; BEGIN EXECUTE IMMEDIATE CREATE TABLE bonus1 (id NUMBER, amt NUMBER); sql_stmt := SELECT * FROM emp WHERE empno = :id; EXECUTE IMMEDIATE sql_stmt INTO emp_rec USING emp_id; END;,1.在SQL*PLUS中使编写一个简单的PL/SQL块,使用SQL*PLUS替代变量输入两个数字值,在PL/SQL块中定义存储两数相除结果,并显示结果 set serveroutput on accept no1 prompt 请输入数字1: accept no2 prompt 请输入数字2: declare result number; begin result:=,20,作业,2.执行creat

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论