易截截图软件、单文件、免安装、纯绿色、仅160KB

北大青鸟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;


相关文档:

【转】 Oracle的在线重定义表功能

Oracle的在线重定义表功能
http://blog.itpub.net/post/468/12855
http://blog.itpub.net/post/468/12962
在一个高可用系统中,如果需要改变一个表的定义是一件比较棘手的问题,尤其是对于7×24系统。Oracle提供的基本语法基本可以满足一般性修改,但是对于把普通堆表改为分区表,把索引组织表修改为堆表等操作就无 ......

Oracle千万条记录插入与查询小结

 
最近做了个项目,实现对存在千万条记录的库表进行插入、查询操作。原以为对数据库的插入、查询是件很容易的事,可不知当数据达到百万甚至千万条级别的时候,这一切似乎变得相当困难。几经折腾,总算完成了任务。
  1、避免使用Hibernate框架
  Hibernate用起来虽然方便,但对于海量数据的操作显得力不从心。 ......

Oracle 11g密码过期

2010-03-12 21:18:52
在google里一搜一大把。但大多都是一个版本。在这里我也转贴一下。
转贴:http://blog.csdn.net/shongyu/archive/2009/06/01/4233260.aspx
按照如下步骤进行操作:
1、查看用户的proifle是哪个,一般是default:
sql>SELECT username,PROFILE from dba_users;
2、查看指定概要文件(如defau ......

Oracle 11g存在密码过期问题

【原因/触发因素】
确定是由于oracle11g中默认在default概要文件中设置了“PASSWORD_LIFE_TIME=180天”所导致。
【影响和风险】
影响
密码过期后,业务进程连接数据库异常,影响业务使用。
问题发生频率
数据库密码过期后,业务进程一旦重启会提示连接失败。
【解决方案】
按照如下步骤进行操作:
1、查 ......
© 2009 ej38.com All Rights Reserved. 关于E健网联系我们 | 站点地图 | 赣ICP备09004571号