ORACLE深入浅出中级篇_第1页
ORACLE深入浅出中级篇_第2页
ORACLE深入浅出中级篇_第3页
ORACLE深入浅出中级篇_第4页
ORACLE深入浅出中级篇_第5页
已阅读5页,还剩91页未读 继续免费阅读

下载本文档

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

文档简介

1、ORACL深入浅出主讲人:邹振兴1深入浅出Oracle 主讲:邹振兴第一章 事务与锁什么是事务?如何Oracle使用事务。在Java中使用事务。什么是锁?演示更新丢失的问题。锁的分类。阻塞与死锁。2深入浅出Oracle 主讲:邹振兴什么是事务什么是事务?事务是一种机制,这种机制能保证在事务内的DML(数据操作语句)做为一个不可分割的单元进行执行。举例说明事务。演示sql servert2005事务处理。演示Oracle事务处理。事务四大特性(ACID)原子性(A) 一致性(C)隔离性(I) 永久性(D)3深入浅出Oracle 主讲:邹振兴什么是事务事务处理的两种方式显示事务:用户通过编码方式开

2、启事务隐式事务:数据库默认认为所有操作都是事务比较sql server 2005与Oracle事务处理方式的区别。4深入浅出Oracle 主讲:邹振兴如何Oracle使用事务Oracel事务关键字Savepoint a ; 设置事务保存点Rollback to a ;回滚到事务保存点a,事务不结束Commit ;提交事务,事务结束Rollback; 回滚所有事务,事务结束讲解Oracel程序员一天5深入浅出Oracle 主讲:邹振兴在Java Jdbc中使用事务演示如何在Java Jdbc中如何使用事务驱动包位置:oracle安装路径-oracle-jdbc-lib-classes12.jar

3、演示案例:DBUtil.java6深入浅出Oracle 主讲:邹振兴什么是锁生活中的锁:为什么会有锁的出现。锁的作用就是保护私有的空间。Oracle中的锁:演示Oracle中更新丢失的问题。讲解此问题的两种思路:一、在第一个用户修改之前不允许其它用户修改。二、在修改之前,查看此数据的版本号。7深入浅出Oracle 主讲:邹振兴锁的分类悲观锁定此锁持悲观态度,认为在用户修改数据期间,一定会有用户再对其修改。那么此锁会在用户事务内一直保持锁定状态,其它用户无法进行修改。在查询语句后接 for update nowait此可加锁。查询多少数据,锁定多少数据。乐观锁定此锁持乐观态度,认为在用户修改数据

4、期间,其它用户不会再对其修改,直到最后提交数据时才判断数据是否已更改。8深入浅出Oracle 主讲:邹振兴锁的分类乐观锁定的实现方式:增加标识列来区分是否已修改通过Oracle ORA_ROWSCN机制来实现乐观锁定9深入浅出Oracle 主讲:邹振兴阻塞与死锁如果你有两个会话,每个会话都持有另一个会话想要的资源,此时就会出现死锁(deadlock)。例如,如果我的数据库中有两个表A 和B,每个表中都只有一行,就可以很容易地展示什么是死锁。我要做的只是打开两个会话(例如,两个SQL*Plus 会话)。在会话A 中更新表A,并在会话B 中更新表B。现在,如果我想在会话B 中更新表A,就会阻塞。会

5、话A 已经锁定了这一行。这不是死锁;只是阻塞而已。我还没有遇到过死锁,因为会话A 还有机会提交或回滚,这样会话B 就能继续。10深入浅出Oracle 主讲:邹振兴阻塞与死锁如果我再回到会话A,试图更新表B,这就会导致一个死锁。要在这两个会话中选择一个作为“牺牲品”,让它的语句回滚。例如,会话B 中对表A 的更新可能回滚,得到以下错误:想要更新表B 的会话A 还阻塞着,Oracle 不会回滚整个事务。只会回滚与死锁有关的某条语句。会话B 仍然锁定着表B 中的行,而会话A 还在耐心地等待这一行可用。收到死锁消息后,会话B 必须决定将表B 上未执行的工作提交还是回滚,或者继续走另一条路,以后再提交。

6、一旦这个会话执行提交或回滚,另一个阻塞的会话就会继续,好像什么也没有发生过一样。11深入浅出Oracle 主讲:邹振兴总结开发多用户、数据库驱动的应用时,最大的难点之一是:一方面要力争取得最大限度的并发访问,与此同时还要确保每个用户能以一致的方式读取和修改数据。为此就有了锁定(locking)机制,这也是所有数据库都具有的一个关键特性,Oracle 在这方面更是技高一筹。不过,Oracle 的这些特性的实现是Oracle所特有的,就像SQL Server 的实现只是SQL Server 特有的一样,应用执行数据处理时,要正确地使用这些机制,而这一点要由你(应用的开发人员)来保证。12深入浅出O

7、racle 主讲:邹振兴第五章 使用PL/SQLPL/SQL简介变量、常量数据类型流程控制异常处理13深入浅出Oracle 主讲:邹振兴PL/SQL简介PL/SQL是Oracle在sql标准上的加强,使用Oracle能够基于对象编程T-SQL是基于事务的结构化查询语言两者都是对SQL的扩展14深入浅出Oracle 主讲:邹振兴PL/SQL块简介PL/SQL 块是构成 PL/SQL 程序的基本组织单元,可以编写存储过程、函数、包、触发器等。PL/SQL 分为三个部分:声明部分、可执行部分和异常处理部分15深入浅出Oracle 主讲:邹振兴PL/SQL块简介演示:PL/SQL打印Hello Wor

8、ld。演示:如何在PL/SQL块中向表中增加一条记录。演示:如何在PL/SQL块中修改表中数据。演示:查询学员张秋丽的年龄。16深入浅出Oracle 主讲:邹振兴PL/SQL块 小结每一个PL/SQL块将会自动开启一个事务,在PL/SQL块中必须结束事务,否则,将会阻塞。PL/SQL块每条语句后,必须带上;,表示语句结束。PL/SQL块中不能执行select语句进行显示。在命令行中执行pl-sql块需加/。在命令行中打印变量需set serverout on;17深入浅出Oracle 主讲:邹振兴变量与常量在PL/SQL块的声明部分声明变量或常量语法:declare sal number;pi

9、 constant number := 3.14;赋值1、使用赋值运算符“:=”2、使用 SELECT INTO 语句 3、接收用户输入18深入浅出Oracle 主讲:邹振兴变量与常量示例Declaremyname varchar2(20) not null :=张三;myage number ;mypi constant number :=3.14;Beginmyage:=26;select ename into myname from emp whereempno=7369;-输出End;19深入浅出Oracle 主讲:邹振兴日期时间日期时间类型存储日期和时间数据常用的两种日期时间类型DA

10、TETIMESTAMPdeclare mydate date; mytime timestamp; begin select sysdate into mydate from dual; select sysdate into mytime from dual; dbms_output.put_line(mydate); dbms_output.put_line(mytime); end;20深入浅出Oracle 主讲:邹振兴布尔类型(boolean)用于存储逻辑值(TRUE、FALSE和NULL)不能向数据库中插入BOOLEAN数据不能将列值保存到BOOLEAN变量中只能对BOOLEAN变量

11、执行逻辑操作21深入浅出Oracle 主讲:邹振兴属性类型用于引用数据库列的数据类型,以及表示表中一行的记录类型列类型%type,语法:表名.列名%type行类型%rowtype,语法:表名%rowtype优点不需要知道被引用的表列的具体类型如果被引用对象的数据类型发生改变,PL/SQL 变量的数据类型也随之改变22深入浅出Oracle 主讲:邹振兴属性类型示例问题1:假设现在不知道emp表Job列的类型,但要保存员工7369的岗位到变量中,如何定义? declare myjob emp.Job%type;begin select Job into myjob from emp where e

12、mpno=7369; dbms_output.put_line(myjob);end;23深入浅出Oracle 主讲:邹振兴属性类型示例问题2:假设要输出emp表员工7369的所有信息,怎么办?定义8个列类型变量,依次输出?declare myemp emp%rowtype;begin select * into myemp from emp where empno=7369; dbms_output.put_line(myemp.ename|myemp.job);end;24深入浅出Oracle 主讲:邹振兴异常处理在运行程序时出现的错误叫做异常发生异常后,语句将停止执行,控制权转移到 PL

13、/SQL 块的异常处理部分异常有两种类型:预定义异常 - 当 PL/SQL 程序违反 Oracle 规则或超越系统限制时隐式引发用户定义异常 - 用户可以在 PL/SQL 块的声明部分定义异常,自定义的异常通过 RAISE 语句显式引发25深入浅出Oracle 主讲:邹振兴预定义异常Others 处理所有异常在用户试图将重复的值存储在使用唯一索引的数据库列中时出现DUP_VAL_ON_INDEX在将字符串转换为数字时出现INVALID_NUMBER在表中不存在请求的行时出现NO_DATA_FOUND在执行SELECT INTO语句后返回多行时出现TOO_MANY_ROWS在以零作为除数时出现Z

14、ERO_DIVIDE26深入浅出Oracle 主讲:邹振兴预定义异常declare myname emp.ename%type;begin select ename into myname from emp; Exception when too_many_rows then dbms_output.put_line(值过多);end;27深入浅出Oracle 主讲:邹振兴预定义异常declare myname emp.ename%type;begin select ename into myname from emp where empno=1; Exception when no_data

15、_found then dbms_output.put_line(没有数据);end;28深入浅出Oracle 主讲:邹振兴用户自定义异常 declare myException Exception; begin if . then raise myException; end if; Exception when myException then . end;29深入浅出Oracle 主讲:邹振兴流程控制条件结构If语句Case语句循环结构Loop循环While循环For循环30深入浅出Oracle 主讲:邹振兴条件结构1) if.then.end if;2) if.then.else if

16、.end if .end if; 嵌套if3) if.then.elsif.then.else.end if; 多重if4)case.when.end case;编写一个PL/SQL块,用户输入一个员工名,如果该员工的工资低于2000,则将该员工工资增长10%。31深入浅出Oracle 主讲:邹振兴接收用户输入的两个数,通过条件结构判断两个数的关系declare num1 number; num2 number; begin num1:=&请输入一个数; num2:=&num2;-接收用户输入&name if num1num2 then dbms_output.put_line(大于); el

17、se dbms_output.put_line(等于); end if; end;32深入浅出Oracle 主讲:邹振兴declare grade varchar2(10); begin grade:=&grade; case grade when A then dbms_output.put_line(优秀); when B then dbms_output.put_line(良好); when C then dbms_output.put_line(一般); when D then dbms_output.put_line(差); else dbms_output.put_line(没这个

18、); end case; end;33深入浅出Oracle 主讲:邹振兴循环结构使用三种循环实现输出100次我爱你34深入浅出Oracle 主讲:邹振兴1)无条件(无限)循环 -跳出循环 exit,exit when. declare counter number:=0; begin loop counter:=counter+1; dbms_output.put_line(counter|:我爱你); -if counter=100 then - exit;-退出循环 -end if; exit when counter=100; end loop; end;35深入浅出Oracle 主讲:

19、邹振兴2)有条件循环 declare counter number:=0; begin while(counter100) loop counter:=counter+1; dbms_output.put_line(counter|:我爱你); end loop; end;36深入浅出Oracle 主讲:邹振兴3)循环固定次数:数字区间:下限.上限 begin for num in 1.100 loop dbms_output.put_line(num|:我爱你); end loop; end;37深入浅出Oracle 主讲:邹振兴动态SQL应用:1、DDL 语句命令和会话控制语句不能在 PL

20、/SQL 中直接使用,但是可以通过动态 SQL 来执行2、在运行时,根据需要动态构建SQL语句执行38深入浅出Oracle 主讲:邹振兴动态SQL动态 SQL 是指在PL/SQL程序执行时生成的 SQL 语句编译程序对动态 SQL 不做处理,而是在程序运行时动态构造语句、对语句进行语法分析并执行执行语法:execute immediate sql语句into 变量列表 -将查询的值赋值给变量using 参数列表 -使用参数填补占位符(:name)39深入浅出Oracle 主讲:邹振兴Eg:利用动态SQL建表begin execute immediate create table test (

21、tid number);end;问题:能否建表后执行插入数据操作?40深入浅出Oracle 主讲:邹振兴Eg:根据员工编号获得员工姓名declare myname emp.ename%type;begin execute immediate select ename from emp where empno=:no into myname using &no; dbms_output.put_line(myname);end;问题:如果Sql语句有多个条件怎么写?41深入浅出Oracle 主讲:邹振兴总结1、:=赋值运算符2、|连接操作符3、&name接受用户输入参数值4、:name 动态SQ

22、L中占位符,使用using填补42深入浅出Oracle 主讲:邹振兴第六章 游标管理什么是游标显示游标的使用游标类型的使用隐式游标的使用43深入浅出Oracle 主讲:邹振兴什么是游标提问:请编写pl-sql块,打印出所有的参加考试的学员信息。分析问题:pl-sql块中无法使用select语句,使用变量也无法保存多行数据。解决问题:要是Oracle提供类似于Java集合的结构就能轻松解决问题。44深入浅出Oracle 主讲:邹振兴显示游标1显式游标在 PL/SQL 块的声明部分定义查询,该查询可以返回多行显式游标的操作过程:数据库打开游标30George344Roger245James1Stu

23、d_mrksStud_namestud_no提取行变量 关闭游标 45深入浅出Oracle 主讲:邹振兴显示游标2定义:CURSOR IS FOR UPDATE | FOR UPDATE OF 字段 ;操作:OPEN ; -打开游标FETCH INTO 变量1,变量2,变量3,.变量n;或者FETCH INTO 行对象; -取出游标当前位置的值 CLOSE ; -关闭游标46深入浅出Oracle 主讲:邹振兴显示游标属性%NOTFOUND -如果FETCH语句失败,则该属性为TRUE,否则为FALSE;%FOUND -如果FETCH语句成功,则该属性为TRUE,否则为FALSE;%ROWCOU

24、NT -返回游标当前的行数;%ISOPEN -如果游标是开的则返回TRUE,否则为FALSE;47深入浅出Oracle 主讲:邹振兴输出所有员工编号与姓名declare rowemp emp%rowtype;-行变量 cursor empcur is select * from emp;-定义游标begin open empcur;-打开游标 loop fetch empcur into rowemp; dbms_output.put_line(rowemp.empno|rowemp.ename); exit when empcur%notfound; end loop; close empc

25、ur;-关闭游标end;48深入浅出Oracle 主讲:邹振兴For循环游标循环游标用于简化游标处理代码自动打开游标,提取记录,关闭游标当用户需要从游标中提取所有记录时使用循环游标的语法如下:FOR IN LOOPEND LOOP;是类型为%rowtype的记录变量使用游标for循环的时候不能使用open语句,fetch语句和close语句,否则会产生错误。 49深入浅出Oracle 主讲:邹振兴输出所有员工编号与姓名declare cursor empcur is select * from emp;-定义游标begin for rowemp in empcur loop dbms_outp

26、ut.put_line(rowemp.empno|rowemp.ename); end loop;end;50深入浅出Oracle 主讲:邹振兴带参数的游标提高游标的灵活性语法:CURSOR (参数列表) IS ;51深入浅出Oracle 主讲:邹振兴根据部门编号输出该部门员工姓名declare cursor empcur(dtno emp.deptno%type) is select * from emp where deptno=dtno;-定义游标beginfor rowemp in empcur(20) loopdbms_output.put_line(rowemp.ename);en

27、d loop;end;52深入浅出Oracle 主讲:邹振兴游标加锁FOR UPDATE | FOR UPDATE OF 字段 即在程中有“UPDATE”,“INSERT”,“DELETE”语句对数据库操作时,游标自动给指定的表或者字段加锁,防止同时有别的程序对指定的表或字段进行“UPDATE”,“INSERT”,“DELETE”操作。在使用“DELETE”,“UPDATE”后还可以在程序中使用CURRENT OF 子句引用当前行进行更新操作。53深入浅出Oracle 主讲:邹振兴使用游标更新工资,翻倍declarecursor mycursor is select sal from emp

28、for update;begin for r in mycursor loopupdate emp set sal=sal*2 where current of mycursor; end loop;end; 54深入浅出Oracle 主讲:邹振兴REF游标与游标变量REF 游标和游标变量用于处理运行时动态执行的 SQL 查询创建游标变量需要两个步骤:声明 REF 游标类型声明 REF 游标类型的变量用于声明 REF 游标类型的语法为:TYPE IS REF CURSORRETURN ;打开游标变量的语法如下: OPEN cursor_name FOR select_statement;55深

29、入浅出Oracle 主讲:邹振兴获取部门10的工资declare Type salcursor is ref cursor;-声明游标类型 salcurvar salcursor;-定义游标变量 mysal number;begin open salcurvar for select sal from myemp where deptno=10; loop fetch salcurvar into mysal; dbms_output.put_line(mysal); exit when salcurvar%notfound; end loop;end;56深入浅出Oracle 主讲:邹振兴游

30、标变量优点游标变量的功能强大,可以简化数据处理。游标变量的优点有:可从不同的 SELECT 语句中提取结果集可以作为过程的参数进行传递可以引用游标的所有属性可以进行赋值运算57深入浅出Oracle 主讲:邹振兴使用游标变量执行动态Sqldeclare Type salcursor is ref cursor;-声明游标类型 salcurvar salcursor;-定义游标变量 mysal number;begin open salcurvar for select sal from myemp where deptno=:dno-动态SQL字符串 using &no;-填补占位符的参数 lo

31、op fetch salcurvar into mysal; dbms_output.put_line(mysal); exit when salcurvar%notfound; end loop;end;58深入浅出Oracle 主讲:邹振兴隐式游标在PL/SQL中使用DML语句时自动创建隐式游标隐式游标自动声明、打开和关闭,其游标名称为 SQL通过检查隐式游标的属性可以获得最近执行的DML 语句的信息59深入浅出Oracle 主讲:邹振兴隐式游标属性%NOTFOUND -如果DML语句没有影响到任何行时,则该属性为TRUE,否则为FALSE;%FOUND -如果DML语句影响到一行或多行时

32、,则该属性为TRUE,否则为FALSE;%ROWCOUNT -返回DML语句影响的行数;%ISOPEN - 游标是否打开,隐式游标始终为FALSE 使用:游标名称+属性SQL%NOTFOUND60深入浅出Oracle 主讲:邹振兴隐式游标属性beginupdate emp set comm=100 where empno=7369;if SQL%Found=true then dbms_output.put_line(更新成功); dbms_output.put_line(受影响的行数|SQl%rowcount);end if;If SQL%NotFound=true then dbms_ou

33、tput.put_line(不存在);end if;end;61深入浅出Oracle 主讲:邹振兴总结游标用于处理查询结果集中的数据游标类型有:隐式游标、显式游标和 REF 游标隐式游标由 PL/SQL 自动定义、打开和关闭显式游标用于处理返回多行的查询在声明 REF 游标时,不需要将 SELECT 语句与 其关联62深入浅出Oracle 主讲:邹振兴第七章 子程序与程序包什么是子程序子程序一:存储过程子程序二:函数子程序三:自主事务处理组织子程序:程序包63深入浅出Oracle 主讲:邹振兴子程序1命名的 PL/SQL 块,编译并存储在数据库中。子程序的各个部分:声明部分可执行部分异常处理部

34、分(可选)子程序的分类:过程 执行某些操作函数 执行操作并返回值64深入浅出Oracle 主讲:邹振兴子程序2子程序的优点:模块化将程序分解为逻辑模块可重用性可以被任意数目的程序调用可维护性简化维护操作安全性通过设置权限,使数据更安全65深入浅出Oracle 主讲:邹振兴子程序一:存储过程过程是用于完成特定任务的子程序 例如:前往售票厅询问关于车票的信息 排队等候 在柜台购买车票 66深入浅出Oracle 主讲:邹振兴子程序一:存储过程创建简单过程create or replace procedure SayHi as begin dbms_output.put_line(hi); end;6

35、7深入浅出Oracle 主讲:邹振兴子程序一:存储过程调用 -1、在命令窗口下 execute SayHi; -2、在SQL Window下 begin SayHi(); end;68深入浅出Oracle 主讲:邹振兴子程序一:存储过程带参数过程,参数不用指定长度 create or replace procedure SayHi(str varchar2) as begin dbms_output.put_line(str); end;69深入浅出Oracle 主讲:邹振兴子程序一:存储过程根据员工编号查询员工姓名,并打印,没找到数据则异常处理 create or replace proce

36、dure SearchName(emp_no number) is empname varchar(20); begin select ename into empname from emp where empno=emp_no; dbms_output.put_line(empname); end;70深入浅出Oracle 主讲:邹振兴子程序一:存储过程过程参数的三种模式:IN用于接受调用程序的值默认的参数模式OUT用于向调用程序返回值 IN OUT用于接受调用程序的值,并向调用程序返回更新的值71深入浅出Oracle 主讲:邹振兴子程序一:存储过程根据员工编号返回员工姓名给另一程序 cre

37、ate or replace procedure SearchName(emp_no in number,empname out varchar2) is begin select ename into empname from emp where empno=emp_no; end;72深入浅出Oracle 主讲:邹振兴子程序一:存储过程declare emp_no number; empname varchar2(20); begin emp_no:=&no; SearchName(emp_no,empname); dbms_output.put_line(empname); end;73

38、深入浅出Oracle 主讲:邹振兴子程序一:存储过程交换两个数 create or replace procedure Swap(num1 in out number,num2 in out number) is temp number; begin temp:=num1; num1:=num2; num2:=temp; end;74深入浅出Oracle 主讲:邹振兴子程序一:存储过程declare num1 number:=10; num2 number:=20; begin dbms_output.put_line(num1=|num1); dbms_output.put_line(num

39、2=|num2); Swap(num1,num2); dbms_output.put_line(调用过程后); dbms_output.put_line(num1=|num1); dbms_output.put_line(num2=|num2); end;75深入浅出Oracle 主讲:邹振兴子程序一:存储过程-返回游标的存储过程create or replace procedure getAllEmp(returnCursor out sys_refcursor) asbegin open returnCursor for select * from emp;end;-使用存储过程返回的游标

40、declare type classcursor is ref cursor; mycursor classcursor; var_emp emp%rowtype;begin getAllEmp(returnCursor = mycursor); loop fetch mycursor into var_emp; dbms_output.put_line(var_emp.ename); exit when mycursor%notfound; end loop;end;76深入浅出Oracle 主讲:邹振兴子程序一:存储过程创建过程的语法:create or replace procedure

41、 过程名称(参数列表) is|as 变量 begin 可执行部分; Exception end; 77深入浅出Oracle 主讲:邹振兴子程序一:存储过程使用Java程序调用几种存储过程。Test.java78深入浅出Oracle 主讲:邹振兴子程序二:函数(function)函数是可以返回值的命名的 PL/SQL 子程序。参数与返回值类型不用指定长度79深入浅出Oracle 主讲:邹振兴子程序二:函数简单函数create or replace function FSayHi return varchar2 is begin return Hi; end;80深入浅出Oracle 主讲:邹振兴

42、子程序二:函数调用函数1、结合查询 select FSayHi from dual; 2、返回值给变量 declare str varchar2(20); begin str:=FSayHi; dbms_output.put_line(str); end;81深入浅出Oracle 主讲:邹振兴子程序二:函数带参函数create or replace function FSayHi(str varchar2) return varchar2 is begin return str; end; select FSayHi(大家好) from dual;82深入浅出Oracle 主讲:邹振兴子程序二

43、:函数-通过员工编号返回员工姓名 create or replace function FSearchName(emp_no number) return varchar2 is empname varchar2(20); begin select ename into empname from emp where empno=emp_no; return empname; end; select FSearchName(7369) from dual;83深入浅出Oracle 主讲:邹振兴子程序二:函数创建函数语法 create or replace function 函数名称(参数列表)

44、return is | as begin 可执行部分; Exception end; 84深入浅出Oracle 主讲:邹振兴子程序二:函数删除过程与函数drop procedure 过程名;drop function 函数名;授予其他用户执行子程序的权限grant execute on 子程序名 to 用户名;85深入浅出Oracle 主讲:邹振兴过程与函数比较过 程函 数作为 PL/SQL 语句执行作为表达式的一部分调用在规格说明中不包含 RETURN 子句必须在规格说明中包含 RETURN 子句不返回任何值必须返回单个值可以包含 RETURN 语句,但是与函数不同,它不能用于返回值必须包含

45、至少一条 RETURN 语句86深入浅出Oracle 主讲:邹振兴子程序三:自主事务处理自主事务处理主事务处理启动独立事务处理然后主事务处理被暂停自主事务处理子程序内的 SQL 操作然后终止自主事务处理恢复主事务处理PRAGMA AUTONOMOUS_TRANSACTION 用于标记子程序为自主事务处理87深入浅出Oracle 主讲:邹振兴子程序三:自主事务处理自主事务处理测试:创建过程1,执行删除员工7369操作,并回滚创建过程2,执行删除员工7499操作,并调用过程1创建程序调用过程2问哪个删除操作会回滚?88深入浅出Oracle 主讲:邹振兴子程序三:自主事务处理create or replace proceduretestp1 is -pragma autonomous_transaction;-标识子程序为自主事务处理begin delete f

温馨提示

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

最新文档

评论

0/150

提交评论