北大青鸟oracle学习笔记25
过程中的事务
定义过程p1
create or replace procedure p1
as
begin
insert into student values(5,'xdh','m',sysdate);
rollback;
end;
定义过程p2
create or replace procedure p2
as
begin
update student set stu_sex = 'a' where stu_id = 3;
p1;
end;
执行过程p2
exec p2;
执行完毕发现表中数据没有变更,说明p1中的rollback语句将p2中的update语句也回滚了。
自主事务处理
步骤:
主事务处理启动自主事务处理
主事务处理被暂停
自主事务处理sql操作
中止自主事务处理
恢复主事务处理
pragma autonomous_transaction
用于标记子程序
在p1的as begin当中加入 pragma autonomous_transaction 后执行,发行p2的update语句生效,p1中的事务作为自主事务来处理,不影响主事务。
程序包
相关对象的封装
-程序包规格说明
声明子程序,不包含实现
create package 包名 is|as 变量声明|类型定义|异常声明|游标声明|函数说明|过程说明
pragma restrict_references(函数名,WNDS[,WNPS][,RNDS][,RNPS])
end [包名];
create or replace package StuPackages
is
type curRefStudent is REF CURSOR RETURN student%rowtype;
procedure insertStudent(stuid in student.stu_id%type,stuname in student.stu_name%type,stusex in student.stu_sex%type,studate in student.stu_birthday%type);
Function QueryStudent(stuid in student.stu_id%type) return student%rowtype;
end StuPackages;
-程序包主体
定义子程序,实现声明部分
create package body 包名 is|as 变量声明|类型定义|异常声明|游标声明|函数定义|过程定义
end [包名];
CREATE OR REPLACE
PACKAGE BODY STUPACKAGES AS
procedure insertStudent(stuid in student.stu_id%type,stuname in student.stu_name%type,stusex in student.stu_sex%type,studate in student.stu_birthday%type) AS
i INTEGER;
Student_Exist EXCEPTION;
BEGIN
select count(*) into i from student where stu_id = stuid;
if i>0 then
raise Student_Exist;
else
insert into student values(stuid,stuname,stusex,studate);
commit;
end if;
相关文档:
刚开始学习Orace,遇到一些非常好的书,在下面列出,随着学习的深入会把遇到的好书都列出来,供学习Oracle的朋友参考,
也欢迎各位朋友补充:
基础:
1. ORACLE DBA基础培训教程 何明著 清华大学出版社
&n ......
--创建对象类型
create or replace type emp_typ as object (
id number,
name varchar2(30),
sal number,
comm number,
member procedure change_comm(new_comm number),
member function get_info return varchar2
) ;
--创建对象类型构造函数定义
create or replace type body emp_typ is
member proce ......
Oracle的在线重定义表功能
http://blog.itpub.net/post/468/12855
http://blog.itpub.net/post/468/12962
在一个高可用系统中,如果需要改变一个表的定义是一件比较棘手的问题,尤其是对于7×24系统。Oracle提供的基本语法基本可以满足一般性修改,但是对于把普通堆表改为分区表,把索引组织表修改为堆表等操作就无 ......