数据库应用技术第五章面向过程的SQL扩展.ppt
《数据库应用技术第五章面向过程的SQL扩展.ppt》由会员分享,可在线阅读,更多相关《数据库应用技术第五章面向过程的SQL扩展.ppt(67页珍藏版)》请在三一办公上搜索。
1、数据库应用技术第五章 面向过程的SQL扩展,内容概要,5.1 服务器端程序5.2 PL/SQL的基本语法5.3 控制流5.4 过程与函数5.5 游标5.6 错误与异常处理5.7 触发器,5.1 服务器端程序,存储过程:用户创建,用SQL和其他语言(如PL/SQL)编写的过程或函数,存储在数据库内部,用来完成一个特定的任务。Oracle:PL/SQLMSSQL:Transaction-SQLPL/SQL:ORACLE对SQL进行扩展的过程式语言,具有通用程序设计语言的绝大部分特性,能够完成较为复杂和完整的功能可以用来编写存储过程。,5.1 服务器端程序,存储过程的优点安全:使用创建者权限、调用者
2、不需要了解内部结构,不需要内部权限。性能:网络开销小,不传送中间结果节约SQL代码分析时间代码可重用完整性和一致性特性:可以使用变量、游标、控制结构,具有模块化、数据抽象、信息隐藏、错误处理等特性。,5.2 PL/SQL的基本语法,一、块结构二、变量的定义与使用三、内嵌SQL,PL/SQL的基本规则,每条语句可以写在多行每条语句都以;结尾。语句保留字和变量不区分大小写,PL/SQL的基本结构-块结构,块结构一个块的语法地位等价于一条语句块的整体构成DECLAREBEGINEXCEPTIONEND;,变量的定义与使用,变量类型简单变量类型和字段的变量类型相同记录变量类型一组具有不同类型的变量的集
3、合,类似C中的STRUCT或PASCAL中的RECORD集合变量类型,变量的定义与使用,变量声明必须先声明,后使用在declare段声明不允许前向引用一行中只能定义一个变量大小写不敏感,变量的定义与使用,简单示例emp_count NUMBER(4);(初始值为NULL)缺省值blood_type CHAR:=0;blood_type CHAR DEFAULT 0;NOT NULL,必须有缺省值emp_count NUMBER(3)NOT NULL:=0;,变量的定义与使用,%TYPE使用其它变量或列的数据类型,但不继承NOT NULL属性credit NUMBER(7,2);debit cr
4、edit%TYPE;经常用于表中字段的数据类型my_dname salers.sname%TYPE;优点:不需要知道精确类型;在表定义发生变化时,不用修改程序,变量的定义与使用,%ROWTYPEDECLAREemp_rec emp%ROWTYPE;CURSOR c1 IS SELECT deptno,dname,loc FROM dept;dept_rec c1%ROWTYPE;,变量的定义与使用,赋值与计算、比较使用:=作为赋值运算符其他计算、比较方法类似于普通语言作用域外层定义的变量可以在子块中使用可以在不同块中定义同名变量子块可以通过外层的块名来引用外层变量,内嵌SQL,可以直接在PL/
5、SQL中使用DQL和DML,但不能使用DDL和DCL在SQL语句中使用变量的值可以出现表达式的地方都可以使用变量直接写变量名,不需要额外的语法要素容易和字段混淆在MSSQL中,使用:作为前缀通常出现在where子句、select子句,内嵌SQL,将查询结果赋值给一个变量SELECT INTO FROM 子句 其他子句要求SELECT语句必须返回1行结果,若返回多行或0行会在运行时报错必须在逻辑上保证返回一条记录,例如使用主键、聚合函数。与子查询不同,返回0行也是错误如何进行错误处理,见后面章节,5.3 控制流语句,条件语句简单条件语句多重条件语句循环语句LOOP循环WHILE循环FOR循环跳转
6、语句EXITGOTO空语句,控制流语句-条件,IF THENEND IF;IF THEN ELSE END IF;,IF THEN ELSIF THEN ELSIF THEN ELSE END IF;,控制流语句-循环,LOOP.LOOP.EXIT WHEN END LOOP;.END LOOP;,控制流语句-循环,WHILE LOOPEND LOOP;FOR IN.REVERSE LOOP END LOOP;,控制流语句-其他,定义标号 跳转GOTO;空语句NULL;返回RETURN;,5.4 过程与函数,过程与函数的作用维护过程与函数外部过程与内部过程调用与参数传递,过程与函数-维护,过程
7、(procedure)CREATE OR REPLACE PROCEDURE()AS|IS;:=IN|OUT|IN OUT DEFAULT:无长度和精度ALTER PROCEDURE COMPILE;DROP PROCEDURE;,过程与函数-维护,函数(function)CREATE OR REPLACE FUNCTION()RETURN AS|IS;ALTER FUNCTION COMPILE;DROP FUNCTION;,创建过程,计算某顾客在给定时间前一年的总购买金额,CREATE PROCEDURE p_1(v_cid IN CHAR,v_sum OUT NUMBER,v_date
8、IN DATE DEFAULT SYSDATE)AS BEGIN SELECT SUM(dollars)INTO v_sum FROM orders WHERE cid=v_cid AND buy_date BETWEEN v_date-365 AND v_date;END;,CREATE FUNCTION f_1(v_cid IN CHAR,v_date IN DATE)RETURN NUMBER AS DECLARE v_sum NUMBER;BEGIN SELECT SUM(dollars)INTO v_sum FROM orders WHERE cid=v_cid AND buy_da
9、te BETWEEN v_date-365 AND v_date;RETURN v_sum;END;,创建和函数,复杂过程举例,CREATE OR REPLACE PROCEDURE INS_SPLIT_WORD(WORD IN VARCHAR2,P_KIND IN NUMBER)ASBEGIN DECLARE CC NUMBER;I NUMBER;J NUMBER;SS VARCHAR2(100);SZ NUMBER;BEGIN DELETE FROM TMP_SPLIT WHERE KIND=P_KIND;IF WORD IS NULL THEN RETURN;END IF;I:=1;SZ
10、:=LENGTH(WORD);CC:=0;,LOOP CC:=CC+1;J:=INSTR(WORD,;,I);IF J=0 THEN J:=SZ+1;END IF;SS:=SUBSTR(WORD,I,J-I);INSERT INTO TMP_SPLIT(SEQ,KIND,SP)VALUES(CC,P_KIND,SS);EXIT WHEN JSZ;I:=J+1;END LOOP;END;END INS_SPLIT_WORD;,内部子过程在过程或函数的DECLARE部分定义,只供该过程或函数调用不能被外部使用声明时不使用关键字CREATE放在DECLARE中的最后部分先声明后使用,可前向声明。不单
11、独存放在数据库中,外部过程与内部过程,内部过程举例,CREATE PROCEDURE p_3 AS BEGIN DECLARE v1 NUMBER;PRODECURE lp_1 AS BEGIN END;PROCEDURE lp_2 AS BEGIN lp_1;END;BEGIN lp_1;lp_2;END;END;,SQL*PLUS 中,使用EXECUTE命令。在其他PL/SQL程序中,直接写出过程及参数CREATE PROCEDURE p_2 AS BEGIN DECLARE v1 NUMBER(10);BEGIN p_1(C001,v1,SYSDATE);/全局过程p_1 END;END
12、;,执行方法,位置表示credit_acct(acct,amt);名称表示 credit_acct(amount=amt,acct_no=acct);credit_acct(acct_no=acct,amount=amt);混和表示credit_acct(acct,amount=amt);如果默认值在前,后面有非默认值,必须使用名称调用方式。,参数传递语法,参数类型,包(Package),由多个过程可以组成包调试使用的包DBMS_OUTPUT.PUT_LINE();DBMS_OUTPUT:包名PUT_LINE:过程名,5.5 游标,游标的作用使用游标游标FOR循环游标属性修改游标中数据,游标的
13、作用,用来处理从数据库中查询出来的一组数据的机制。游标查询返回的数据称为结果集(result set)。游标的使用类似文件操作,包括OPEN、FETCH、CLOSE等操作。游标的类型显式游标隐含游标PL/SQL为每一个DML语句隐含定义了一个游标包游标,使用游标,声明在DECLARE段打开循环读取读取当前行的数据到变量中判断是否读到末尾关闭关闭后才可以重新打开,游标声明,声明CURSOR()RETURN IS;:IN:=|DEFAULT 参数只能是基本类型,必须是IN类型,可以有缺省值。,DECLARE CURSOR c1 IS SELECT sid,sname,salary FROM sal
14、ers WHERE salary 2000;CURSOR c2 RETURN salers%ROWTYPE IS SELECT*FROM salers WHERE salary 2000;CURSOR c3(v_salary)IS SELECT sid,sname,salary FROM salers WHERE salary v_salary;,游标声明,使用游标,打开OPEN();可以使用位置表示法和名称表示法。不能打开已经打开的游标。打开游标时带入的参数已经在打开时被固定。读取数据FETCH INTO|;,使用游标,循环读LOOP FETCH c1 INTO my_record;EXIT
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据库 应用技术 第五 面向 过程 SQL 扩展
链接地址:https://www.31ppt.com/p-6296455.html