oracle博客北大青鸟,北大青鸟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;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值