oracle中的函数与触发器的使用
2010-06-17 15:49
465 查看
oracle中函数与触发器的使用,与sql中函数与触发器的使用功能是一致的。
--从临时表中查找指定的专家记录是否存在
-- drop function F_EXPERT_EXIST_IN_TEMP
create or replace function "XHPORTAL".F_EXPERT_EXIST_IN_TEMP(
nExpertId in NUMBER,
nSqlType in NUMBER,
nTrs_flag in NUMBER
)
return NUMBER is
v_count_expert NUMBER;
CURSOR c_CountExperts is select count(*) from Expert_timer$_temp where EXPERTID = nExpertId and SQL_TYPE = nSqlType and TRS_FLAG = nTrs_flag ;
begin
OPEN c_CountExperts;
LOOP
FETCH c_CountExperts INTO v_count_expert;
EXIT WHEN c_CountExperts%NOTFOUND;
END LOOP;
CLOSE c_CountExperts;
return v_count_expert;
end F_EXPERT_EXIST_IN_TEMP;
--工作经历触发器(只有专家才有工作经历)
--新增
create or replace TRIGGER WorkHistory_I_TRIG AFTER INSERT ON XHPORTAL.XWCMWORKHISTORY
FOR EACH ROW
declare nExpertCount number;
BEGIN
select "XHPORTAL".F_EXPERT_EXIST_IN_TEMP(:new.OBJID,1,0) into nExpertCount from dual;
if(nExpertCount =0) then
INSERT INTO Expert_timer$_temp VALUES(Expert_timer$_SEQ.NEXTVAL,:new.OBJID,1,0);
end if;
END;
--修改
create or replace TRIGGER WorkHistory_U_TRIG AFTER UPDATE ON XHPORTAL.XWCMWORKHISTORY
FOR EACH ROW
declare nExpertCount number;
BEGIN
select "XHPORTAL".F_EXPERT_EXIST_IN_TEMP(:old.OBJID,3,0) into nExpertCount from dual;
if(nExpertCount =0) then
INSERT INTO Expert_timer$_temp VALUES(Expert_timer$_SEQ.NEXTVAL,:old.OBJID,3,0);
end if;
select "XHPORTAL".F_EXPERT_EXIST_IN_TEMP(:new.OBJID,1,0) into nExpertCount from dual;
if(nExpertCount =0) then
INSERT INTO Expert_timer$_temp VALUES(Expert_timer$_SEQ.NEXTVAL,:new.OBJID,1,0);
end if;
END;
--删除
create or replace TRIGGER WorkHistory_D_TRIG AFTER DELETE ON XHPORTAL.XWCMWORKHISTORY
FOR EACH ROW
declare nExpertCount number;
BEGIN
select "XHPORTAL".F_EXPERT_EXIST_IN_TEMP(:old.OBJID,3,0) into nExpertCount from dual;
if(nExpertCount =0) then
INSERT INTO Expert_timer$_temp VALUES(Expert_timer$_SEQ.NEXTVAL,:old.OBJID,3,0);
end if;
END;
--从临时表中查找指定的专家记录是否存在
-- drop function F_EXPERT_EXIST_IN_TEMP
create or replace function "XHPORTAL".F_EXPERT_EXIST_IN_TEMP(
nExpertId in NUMBER,
nSqlType in NUMBER,
nTrs_flag in NUMBER
)
return NUMBER is
v_count_expert NUMBER;
CURSOR c_CountExperts is select count(*) from Expert_timer$_temp where EXPERTID = nExpertId and SQL_TYPE = nSqlType and TRS_FLAG = nTrs_flag ;
begin
OPEN c_CountExperts;
LOOP
FETCH c_CountExperts INTO v_count_expert;
EXIT WHEN c_CountExperts%NOTFOUND;
END LOOP;
CLOSE c_CountExperts;
return v_count_expert;
end F_EXPERT_EXIST_IN_TEMP;
--工作经历触发器(只有专家才有工作经历)
--新增
create or replace TRIGGER WorkHistory_I_TRIG AFTER INSERT ON XHPORTAL.XWCMWORKHISTORY
FOR EACH ROW
declare nExpertCount number;
BEGIN
select "XHPORTAL".F_EXPERT_EXIST_IN_TEMP(:new.OBJID,1,0) into nExpertCount from dual;
if(nExpertCount =0) then
INSERT INTO Expert_timer$_temp VALUES(Expert_timer$_SEQ.NEXTVAL,:new.OBJID,1,0);
end if;
END;
--修改
create or replace TRIGGER WorkHistory_U_TRIG AFTER UPDATE ON XHPORTAL.XWCMWORKHISTORY
FOR EACH ROW
declare nExpertCount number;
BEGIN
select "XHPORTAL".F_EXPERT_EXIST_IN_TEMP(:old.OBJID,3,0) into nExpertCount from dual;
if(nExpertCount =0) then
INSERT INTO Expert_timer$_temp VALUES(Expert_timer$_SEQ.NEXTVAL,:old.OBJID,3,0);
end if;
select "XHPORTAL".F_EXPERT_EXIST_IN_TEMP(:new.OBJID,1,0) into nExpertCount from dual;
if(nExpertCount =0) then
INSERT INTO Expert_timer$_temp VALUES(Expert_timer$_SEQ.NEXTVAL,:new.OBJID,1,0);
end if;
END;
--删除
create or replace TRIGGER WorkHistory_D_TRIG AFTER DELETE ON XHPORTAL.XWCMWORKHISTORY
FOR EACH ROW
declare nExpertCount number;
BEGIN
select "XHPORTAL".F_EXPERT_EXIST_IN_TEMP(:old.OBJID,3,0) into nExpertCount from dual;
if(nExpertCount =0) then
INSERT INTO Expert_timer$_temp VALUES(Expert_timer$_SEQ.NEXTVAL,:old.OBJID,3,0);
end if;
END;
相关文章推荐
- Oracle学习记录之使用自定义函数和触发器实现主键动态生成
- oracle简单的存储过程和函数以及触发器的使用
- ORACLE数库之PL/SQL高级篇 存储过程,函数,包,触发器的使用
- Oracle学习记录之使用自定义函数和触发器实现主键动态生成
- Oracle学习记录——使用自定义函数和触发器实现主键动态生成
- Oracle PL/SQL存储过程,函数,包,触发器的使用
- java 从零开始,学习笔记之基础入门<Oracle_函数_触发器_游标_存储过程_视图>(三十五)
- Sql server 与oracle 函数使用区别
- sql server 函数与触发器的使用
- Oracle 触发器使用实例
- Oracle 查看 表 存储过程 触发器 函数 等对象定义语句的方法
- oracle常用函数使用大全
- Oracle中一些函数的使用
- Oracle 分析函数的使用
- oracle的函数使用
- 东软学习,oracle函数与触发器
- oracle sum()over函数的使用
- [Oracle]函数,过程,触发器的误删除的恢复
- Oracle中序列和触发器的使用
- 使用oracle的olap函数优化分页查询