蝸ゼ牜ご赽跑 的Blog
BlogJava
首页
新随笔
联系
聚合
管理
随笔分类
Design Patterns(22)
(rss)
Eclipse(2)
(rss)
Hibernate(3)
(rss)
J2ee(2)
(rss)
Java(4)
(rss)
Javascript(3)
(rss)
Linux(2)
(rss)
Maven(1)
(rss)
Oracle(2)
(rss)
SiteMesh(1)
(rss)
Spring(3)
(rss)
Struts2(5)
(rss)
Tomcat(2)
(rss)
XML(2)
(rss)
不得不转(1)
(rss)
想说的话(3)
(rss)
随笔档案
2008年9月 (1)
2008年8月 (1)
2008年4月 (1)
2008年3月 (6)
2008年2月 (4)
2008年1月 (2)
2007年12月 (12)
2007年11月 (13)
2007年4月 (6)
2006年12月 (8)
最新随笔
1. oracle 行级触发器
2. 使用hibernate对oracle数据库中数据分页出现重复记录
3. Java正则表达式学习(转载)
4. 何时才能天下无贼?
5. 记录一道过滤int数组中相同数据并按从小到大的排序的试题
6. 我现在才发现我那天遇到的两道面试题不但不变态而且还很有意义
7. 使用SiteMesh装饰页面
8. 使用Maven2构建项目
9. Hibernate构架应用中常用保存方式区别(转载)
10. Struts2拦截器学习
最新评论
1. re: Struts2+spring2+hibernate3整合方案[未登录]
能不能给我个原码啊!菜鸟学习中跪求619562440@qq.com 谢谢
--张
2. re: 分享一个spring+hibernate的通用分页类
里面userPage是什么
--暗夜百家
3. re: Struts2+spring2+hibernate3整合方案
能不能给我发一份源码,跪求764263599@qq.com 谢谢
--李浩宇
4. re: 设计模式学习笔记(二十一)—Composite模式
谢谢楼主的文章
--向日葵大侠
5. re: 使用hibernate对oracle数据库中数据分页出现重复记录
学习了!
--游客
oracle 行级触发器
Posted on 2008-09-18 12:23
flustar
阅读(959)
评论(0)
编辑
收藏
所属分类:
Oracle
由于项目中业务比较复杂,在代码中实现不太容易,于是就写了一个触发器来完成,第一次写触发器,对oracle的pl/sql 语法感觉不是太习惯,特在此记录一下,以便以后再写的时候,有个参考。
create
or
replace
trigger
audit_sync_trigger after
update
or
delete
on
tbl_video_programme
REFERENCING OLD
AS
old NEW
AS
new
for
each row
declare
is_audit_new
number
;
/**/
/*
新的审核值
*/
is_audit_old
number
;
category_id_new
number
;
/**/
/*
新的分类值
*/
category_id_old
number
;
keyword_id_new
number
;
/**/
/*
新的关键字值
*/
keyword_id_old
number
;
is_deleted_new
number
;
/**/
/*
新的是否删除,假删除的值
*/
is_deleted_old
number
;
begin
dbms_output.put_line(
'
test!!!!
'
);
/**/
/*
当执行插入操作时
*/
if
inserting
then
keyword_id_new:
=
:new.keyword_id;
category_id_new:
=
:new.category_id;
if
keyword_id_new
>
0
then
update
tbl_keyword k
set
k.NOT_AUDIT_NUM
=
k.NOT_AUDIT_NUM
+
1
where
k.KEYWORD_ID
=
keyword_id_new;
end
if
;
if
category_id_new
>
0
then
update
tbl_programme_category pc
set
pc.NOT_AUDIT_NUM
=
pc.NOT_AUDIT_NUM
+
1
where
pc.PROGRAMME_CATEGORY_ID
=
category_id_new;
--
INSERT INTO TEST VALUES('一条记录被插入了!');
end
if
;
end
if
;
/**/
/*
当执行更新操作时,主要就是审核和假删除
*/
if
updating
then
is_audit_new:
=
:new.is_audit;
is_audit_old:
=
:old.is_audit;
category_id_new:
=
:new.category_id;
category_id_old:
=
:old.category_id;
keyword_id_new:
=
:new.keyword_id;
keyword_id_old:
=
:old.keyword_id;
is_deleted_new:
=
:new.is_deleted;
is_deleted_old:
=
:old.is_deleted;
/**/
/*
如果这个节目已经匹配上关键字
*/
if
category_id_old
>
0
then
/**/
/*
如果一个节目被假删除
*/
if
is_deleted_new
>
is_deleted_old
then
if
is_audit_old
=
1
then
update
tbl_programme_category pc
set
pc.TOTAL_NUM
=
pc.TOTAL_NUM
-
1
where
pc.PROGRAMME_CATEGORY_ID
=
category_id_old;
INSERT
INTO
TEST
VALUES
(is_deleted_new);
INSERT
INTO
TEST
VALUES
(is_deleted_old);
if
keyword_id_old
>
0
then
update
tbl_keyword k
set
k.AUDIT_FINISH_NUM
=
k.AUDIT_FINISH_NUM
-
1
where
k.KEYWORD_ID
=
keyword_id_old;
end
if
;
else
update
tbl_programme_category pc
set
pc.NOT_AUDIT_NUM
=
pc.NOT_AUDIT_NUM
-
1
where
pc.PROGRAMME_CATEGORY_ID
=
category_id_old;
if
keyword_id_old
>
0
then
update
tbl_keyword k
set
k.NOT_AUDIT_NUM
=
k.NOT_AUDIT_NUM
-
1
where
k.KEYWORD_ID
=
keyword_id_old;
end
if
;
end
if
;
end
if
;
end
if
;
/**/
/*
审核一个节目,原来已经匹配上关键字,有分类
*/
if
category_id_old
>
0
then
--
INSERT INTO TEST VALUES('该关键字原来有分类!');
/**/
/*
如果该节目以前未审核
*/
if
is_audit_new
>
is_audit_old
then
--
INSERT INTO TEST VALUES('审核一个节目由未审核到已审核');
/**/
/*
如果修改了分类
*/
if
category_id_new
!=
category_id_old
then
INSERT
INTO
TEST
VALUES
(
'
修改了分类!
'
);
/**/
/*
原来分类数-1
*/
update
tbl_programme_category pc
set
pc.NOT_AUDIT_NUM
=
pc.NOT_AUDIT_NUM
-
1
where
pc.PROGRAMME_CATEGORY_ID
=
category_id_old;
/**/
/*
新的分类数+1
*/
update
tbl_programme_category pc
set
pc.TOTAL_NUM
=
pc.TOTAL_NUM
+
1
where
pc.PROGRAMME_CATEGORY_ID
=
category_id_new;
/**/
/*
如果同时修改了关键字
*/
if
keyword_id_old
!=
keyword_id_new
then
/**/
/*
原来关键字数-1
*/
if
keyword_id_old
>
0
then
update
tbl_keyword k
set
k.NOT_AUDIT_NUM
=
k.NOT_AUDIT_NUM
-
1
where
k.KEYWORD_ID
=
keyword_id_old;
end
if
;
/**/
/*
新修改关键字数+1
*/
if
keyword_id_new
>
0
then
update
tbl_keyword k
set
k.AUDIT_FINISH_NUM
=
k.AUDIT_FINISH_NUM
+
1
where
k.KEYWORD_ID
=
keyword_id_new;
end
if
;
end
if
;
else
/**/
/*
未审核分类不变
*/
update
tbl_programme_category pc
set
pc.NOT_AUDIT_NUM
=
pc.NOT_AUDIT_NUM
-
1
where
pc.PROGRAMME_CATEGORY_ID
=
category_id_old;
update
tbl_programme_category pc
set
pc.TOTAL_NUM
=
pc.TOTAL_NUM
+
1
where
pc.PROGRAMME_CATEGORY_ID
=
category_id_old;
/**/
/*
如果只修改了关键字
*/
if
keyword_id_old
!=
keyword_id_new
then
/**/
/*
原来关键字数-1
*/
if
keyword_id_old
>
0
then
update
tbl_keyword k
set
k.NOT_AUDIT_NUM
=
k.NOT_AUDIT_NUM
-
1
where
k.KEYWORD_ID
=
keyword_id_old;
end
if
;
/**/
/*
新修改关键字数+1
*/
if
keyword_id_new
>
0
then
update
tbl_keyword k
set
k.AUDIT_FINISH_NUM
=
k.AUDIT_FINISH_NUM
+
1
where
k.KEYWORD_ID
=
keyword_id_new;
end
if
;
else
/**/
/*
如果关键字没被修改
*/
update
tbl_keyword k
set
k.NOT_AUDIT_NUM
=
k.NOT_AUDIT_NUM
-
1
where
k.KEYWORD_ID
=
keyword_id_old;
update
tbl_keyword k
set
k.AUDIT_FINISH_NUM
=
k.AUDIT_FINISH_NUM
+
1
where
k.KEYWORD_ID
=
keyword_id_old;
end
if
;
end
if
;
else
/**/
/*
如果该节目以前审核了
*/
/**/
/*
如果修改了分类
*/
if
category_id_new
!=
category_id_old
then
/**/
/*
原来分类数-1
*/
update
tbl_programme_category pc
set
pc.TOTAL_NUM
=
pc.TOTAL_NUM
-
1
where
pc.PROGRAMME_CATEGORY_ID
=
category_id_old;
/**/
/*
新的分类数+1
*/
update
tbl_programme_category pc
set
pc.TOTAL_NUM
=
pc.TOTAL_NUM
+
1
where
pc.PROGRAMME_CATEGORY_ID
=
category_id_new;
/**/
/*
如果也修改了关键字
*/
if
keyword_id_old
!=
keyword_id_new
then
/**/
/*
原来关键字数-1
*/
if
keyword_id_old
>
0
then
update
tbl_keyword k
set
k.AUDIT_FINISH_NUM
=
k.AUDIT_FINISH_NUM
-
1
where
k.KEYWORD_ID
=
keyword_id_old;
end
if
;
/**/
/*
新修改关键字数+1
*/
if
keyword_id_new
>
0
then
update
tbl_keyword k
set
k.AUDIT_FINISH_NUM
=
k.AUDIT_FINISH_NUM
+
1
where
k.KEYWORD_ID
=
keyword_id_new;
end
if
;
end
if
;
else
/**/
/*
如果只修改了关键字
*/
if
keyword_id_old
!=
keyword_id_new
then
/**/
/*
原来关键字数-1
*/
if
keyword_id_old
>
0
then
update
tbl_keyword k
set
k.AUDIT_FINISH_NUM
=
k.AUDIT_FINISH_NUM
-
1
where
k.KEYWORD_ID
=
keyword_id_old;
end
if
;
/**/
/*
新修改关键字数+1
*/
if
keyword_id_new
>
0
then
update
tbl_keyword k
set
k.AUDIT_FINISH_NUM
=
k.AUDIT_FINISH_NUM
+
1
where
k.KEYWORD_ID
=
keyword_id_new;
end
if
;
end
if
;
end
if
;
end
if
;
else
/**/
/*
审核一个节目,该节目没有分类,该节目肯定是未审
*/
update
tbl_programme_category pc
set
pc.TOTAL_NUM
=
pc.TOTAL_NUM
+
1
where
pc.PROGRAMME_CATEGORY_ID
=
category_id_new;
if
keyword_id_new
>
0
then
/**/
/*
如果审核的时候指定了关键字
*/
update
tbl_keyword k
set
k.AUDIT_FINISH_NUM
=
k.AUDIT_FINISH_NUM
+
1
where
k.KEYWORD_ID
=
keyword_id_new;
end
if
;
end
if
;
--
INSERT INTO TEST VALUES('一条记录被更新了!');
dbms_output.put_line(
'
一条记录被更新了!
'
);
end
if
;
/**/
/*
当执行真删除操作时
*/
if
deleting
then
is_audit_old:
=
:old.is_audit;
category_id_old:
=
:old.category_id;
keyword_id_old:
=
:old.keyword_id;
/**/
/*
如果删除的节目是已审核的
*/
if
is_audit_old
=
1
then
if
category_id_old
>
0
then
update
tbl_programme_category pc
set
pc.TOTAL_NUM
=
pc.TOTAL_NUM
-
1
where
pc.PROGRAMME_CATEGORY_ID
=
category_id_old;
end
if
;
if
keyword_id_old
>
0
then
/**/
/*
如果该节目匹配上了关键字
*/
update
tbl_keyword k
set
k.AUDIT_FINISH_NUM
=
k.AUDIT_FINISH_NUM
-
1
where
k.KEYWORD_ID
=
keyword_id_old;
end
if
;
else
if
category_id_old
>
0
then
update
tbl_programme_category pc
set
pc.NOT_AUDIT_NUM
=
pc.NOT_AUDIT_NUM
-
1
where
pc.PROGRAMME_CATEGORY_ID
=
category_id_old;
end
if
;
if
keyword_id_old
>
0
then
/**/
/*
如果该节目匹配上了关键字
*/
update
tbl_keyword k
set
k.NOT_AUDIT_NUM
=
k.NOT_AUDIT_NUM
-
1
where
k.KEYWORD_ID
=
keyword_id_old;
end
if
;
end
if
;
dbms_output.put_line(
'
一条记录被删除了!
'
);
--
INSERT INTO TEST VALUES('一条记录被删除了!');
end
if
;
end
;
新用户注册
刷新评论列表
只有注册用户
登录
后才能发表评论。
网站导航:
博客园
IT新闻
Chat2DB
C++博客
博问
管理
相关文章:
oracle 行级触发器
使用hibernate对oracle数据库中数据分页出现重复记录
公告
本blog文章大都是作者学习之余所做,加上本人资历尚浅,对某些问题的理解可能存在疏漏之处,望高手们多多批评指正,同时也希望在此,多结交一些朋友。
常用链接
我的随笔
我的评论
我的参与
最新评论
参考链接
IBM developerWorks
JavaEye
JavaWorld
Java开源大全
Java文档大全
Java程序员精粹
Linux伊甸园
SVN中文站
UML软件工程组织
中国JAVA实验室
牛人的blog
评论排行榜
1. Struts2+spring2+hibernate3整合方案(44)
2. 使用TOMCAT5.5连接池连接mysql(解决Cannot create JDBC driver of class '' for connect URL 'null')(28)
3. 我现在才发现我那天遇到的两道面试题不但不变态而且还很有意义(24)
4. Struts2中使用Common-FileUpload实现文件上传(9)
5. 分享一个spring+hibernate的通用分页类(6)
阅读排行榜
1. 使用TOMCAT5.5连接池连接mysql(解决Cannot create JDBC driver of class '' for connect URL 'null')(51562)
2. Struts2+spring2+hibernate3整合方案(33785)
3. Struts2中使用Common-FileUpload实现文件上传(9652)
4. Struts2中有关struts-default.xml,struts.xml,struts.properties文件详解(7025)
5. Struts2中Action详解(5968)
posts - 146, comments - 143, trackbacks - 0, articles - 0
Copyright © flustar