触发器问题

[复制链接]
查看11 | 回复9 | 2007-4-25 04:02:08 | 显示全部楼层 |阅读模式
昨天做了一次数据库expdp/impdp迁移,导入之后发现有个触发器报错:

begin
if inserting then
if :new.ptzz = 1 then
insert into MVS_R_SCHOOL_SPECIALTY_TYPE
(Id, SPECIALID, STUDY_TYPEID, STUDY_TYPENAME)
values
(seq_MVS_SPECIALTY_TYPE.Nextval, :new.id, 1, '普通中专');
end if;
if :new.crzz = 1 then
insert into MVS_R_SCHOOL_SPECIALTY_TYPE
(Id, SPECIALID, STUDY_TYPEID, STUDY_TYPENAME)
values
(seq_MVS_SPECIALTY_TYPE.Nextval, :new.id, 2, '成人中专');
end if;
if :new.zygz = 1 then
insert into MVS_R_SCHOOL_SPECIALTY_TYPE
(Id, SPECIALID, STUDY_TYPEID, STUDY_TYPENAME)
values
(seq_MVS_SPECIALTY_TYPE.Nextval, :new.id, 3, '职业高中');
end if;
if :new.jgxx = 1 then
insert into MVS_R_SCHOOL_SPECIALTY_TYPE
(Id, SPECIALID, STUDY_TYPEID, STUDY_TYPENAME)
values
(seq_MVS_SPECIALTY_TYPE.Nextval, :new.id, 4, '技工学校');
end if;
if :new.qt = 1 then
insert into MVS_R_SCHOOL_SPECIALTY_TYPE
(Id, SPECIALID, STUDY_TYPEID, STUDY_TYPENAME)
values
(seq_MVS_SPECIALTY_TYPE.Nextval, :new.id, 5, '其他');
end if;
end if;
if updating and ((:new.ptzz != :old.ptzz) or (:new.crzz != :old.crzz) or
(:new.zygz != :old.zygz) or (:new.jgxx != :old.jgxx) or
(:new.qt != :old.qt)) then
if :new.ptzz = 1 and :old.ptzz = 0 then
insert into MVS_R_SCHOOL_SPECIALTY_TYPE
(Id, SPECIALID, STUDY_TYPEID, STUDY_TYPENAME)
values
(seq_MVS_SPECIALTY_TYPE.Nextval, :new.id, 1, '普通中专');
elsif :new.ptzz = 0 and :old.ptzz = 1 then
delete from MVS_R_SCHOOL_SPECIALTY_TYPE
where SPECIALID = :old.id
and STUDY_TYPEID = 1;
end if;
if :new.crzz = 1 and :old.crzz = 0 then
insert into MVS_R_SCHOOL_SPECIALTY_TYPE
(Id, SPECIALID, STUDY_TYPEID, STUDY_TYPENAME)
values
(seq_MVS_SPECIALTY_TYPE.Nextval, :new.id, 2, '成人中专');
elsif :new.crzz = 0 and :old.crzz = 1 then
delete from MVS_R_SCHOOL_SPECIALTY_TYPE
where SPECIALID = :old.id
and STUDY_TYPEID = 2;
end if;
if :new.zygz = 1 and :old.zygz = 0 then
insert into MVS_R_SCHOOL_SPECIALTY_TYPE
(Id, SPECIALID, STUDY_TYPEID, STUDY_TYPENAME)
values
(seq_MVS_SPECIALTY_TYPE.Nextval, :new.id, 3, '职业高中');
elsif :new.zygz = 0 and :old.zygz = 1 then
delete from MVS_R_SCHOOL_SPECIALTY_TYPE
where SPECIALID = :old.id
and STUDY_TYPEID = 3;
end if;
if :new.jgxx = 1 and :old.jgxx = 0 then
insert into MVS_R_SCHOOL_SPECIALTY_TYPE
(Id, SPECIALID, STUDY_TYPEID, STUDY_TYPENAME)
values
(seq_MVS_SPECIALTY_TYPE.Nextval, :new.id, 4, '技工学校');
elsif :new.jgxx = 0 and :old.jgxx = 1 then
delete from MVS_R_SCHOOL_SPECIALTY_TYPE
where SPECIALID = :old.id
and STUDY_TYPEID = 4;
end if;
if :new.qt = 1 and :old.qt = 0 then
insert into MVS_R_SCHOOL_SPECIALTY_TYPE
(Id, SPECIALID, STUDY_TYPEID, STUDY_TYPENAME)
values
(seq_MVS_SPECIALTY_TYPE.Nextval, :new.id, 5, '其他');
elsif :new.qt = 0 and :old.qt = 1 then
delete from MVS_R_SCHOOL_SPECIALTY_TYPE
where SPECIALID = :old.id
and STUDY_TYPEID = 5;
end if;
end if;
--begin--
if updating and
(:new.STANDARD_SPECIALTY_ID != :old.STANDARD_SPECIALTY_ID) and
(get_student_sfsn2(:new.STANDARD_SPECIALTY_ID) !=
get_student_sfsn2(:old.STANDARD_SPECIALTY_ID)) then
update mvs_b_student t
set t.is_update = 1
where t.SPECIALIZEDID = :old.id
and t.status = 1;
end if;
---end---
end modify_school_specialitytype;

错误内容如下:
行号= 4 列号= 7 错误文本= PL/SQL: SQL Statement ignored
行号= 7 列号= 10 错误文本= PL/SQL: ORA-02289: sequence does not exist
行号= 10 列号= 7 错误文本= PL/SQL: SQL Statement ignored
行号= 13 列号= 10 错误文本= PL/SQL: ORA-02289: sequence does not exist
行号= 16 列号= 7 错误文本= PL/SQL: SQL Statement ignored
行号= 19 列号= 10 错误文本= PL/SQL: ORA-02289: sequence does not exist
行号= 22 列号= 7 错误文本= PL/SQL: SQL Statement ignored
行号= 25 列号= 10 错误文本= PL/SQL: ORA-02289: sequence does not exist
行号= 28 列号= 7 错误文本= PL/SQL: SQL Statement ignored
行号= 31 列号= 10 错误文本= PL/SQL: ORA-02289: sequence does not exist
行号= 38 列号= 7 错误文本= PL/SQL: SQL Statement ignored
行号= 41 列号= 10 错误文本= PL/SQL: ORA-02289: sequence does not exist
行号= 49 列号= 7 错误文本= PL/SQL: SQL Statement ignored
行号= 52 列号= 10 错误文本= PL/SQL: ORA-02289: sequence does not exist
行号= 60 列号= 7 错误文本= PL/SQL: SQL Statement ignored
行号= 63 列号= 10 错误文本= PL/SQL: ORA-02289: sequence does not exist
行号= 71 列号= 7 错误文本= PL/SQL: SQL Statement ignored
行号= 74 列号= 10 错误文本= PL/SQL: ORA-02289: sequence does not exist
行号= 82 列号= 7 错误文本= PL/SQL: SQL Statement ignored
行号= 85 列号= 10 错误文本= PL/SQL: ORA-02289: sequence does not exist

个人对触发器存储过程还不太熟,请高手帮忙看看。
[ 本帖最后由 lizisor1 于 2011-4-6 09:32 编辑 ]
回复

使用道具 举报

千问 | 2007-4-25 04:02:08 | 显示全部楼层
报错的很明显
seq_MVS_SPECIALTY_TYPE没有嘛
回复

使用道具 举报

千问 | 2007-4-25 04:02:08 | 显示全部楼层
是不是可以这样理解:
这个过程是需要向MVS_R_SCHOOL_SPECIALTY_TYPE中插入一些东西,对应这个表中id字段的取值是从seq_MVS_SPECIALTY_TYPE.Nextval来取,可是由于没有seq_MVS_SPECIALTY_TYPE这个表,因此报了这样的错误?
回复

使用道具 举报

千问 | 2007-4-25 04:02:08 | 显示全部楼层
那是明显的,你需要这东西没有这东西,静态SQL当然编译不通过
回复

使用道具 举报

千问 | 2007-4-25 04:02:08 | 显示全部楼层
我想确定一下seq_MVS_SPECIALTY_TYPE这个是不是一个表?
因为一般表名称都是大写的,而这里开头却是小写
不过,无论如何,而且我查过这个schema下面都没有seq_MVS_SPECIALTY_TYPE这个表。
回复

使用道具 举报

千问 | 2007-4-25 04:02:08 | 显示全部楼层
seq_MVS_SPECIALTY_TYPE.Nextval
你不知道seq_MVS_SPECIALTY_TYPE是什么???看不出来???
回复

使用道具 举报

千问 | 2007-4-25 04:02:08 | 显示全部楼层
真的不知道,呵呵,自己这方面基础很差~请教!
觉着是一个表
[ 本帖最后由 lizisor1 于 2011-4-6 10:11 编辑 ]
回复

使用道具 举报

千问 | 2007-4-25 04:02:08 | 显示全部楼层
创建一个序列,类似如下
create sequence seq_MVS_SPECIALTY_TYPE
minvalue 1
maxvalue 9999
start with 1
increment by 1
cache 10
cycle;
回复

使用道具 举报

千问 | 2007-4-25 04:02:08 | 显示全部楼层
楼主真不知道还是假不知道?
回复

使用道具 举报

千问 | 2007-4-25 04:02:08 | 显示全部楼层
SQL不区分大小写的
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行