请解释一下这个颇让oracle触发器

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了请解释一下这个颇让oracle触发器相关的知识,希望对你有一定的参考价值。

create or replace trigger CUX_CREATE_DOC_SEQ
before update of STATUS on GL.GL_JE_HEADERS
for each row

when (old.status <>'P'
and new.CURRENCY_CODE <>'STAT' AND NEW.ACTUAL_FLAG = 'A'
)
declare
VPREFLEX varchar2(20);
VSEQ number;
Orgid number;
Sobid number;
begin

SELECT GJB.ORG_ID
INTO ORGID
FROM GL_JE_BATCHES GJB
WHERE GJB.JE_BATCH_ID = :NEW.JE_BATCH_ID;

Sobid := :NEW.SET_OF_BOOKS_ID;

------------------------------------------------------------------
关键是::NEW 和 :old
谢了

IF :new.STATUS = 'P' THEN
select next_je_sequence
into VSEQ
from cux_gl_je_sequence
where SET_OF_BOOKS_ID = :NEW.SET_OF_BOOKS_ID and ORG_ID = Orgid and
PERIOD_NAME = :NEW.PERIOD_NAME
/*for update of next_je_sequence*/;

:new.doc_sequence_value := VSEQ;

update cux_gl_je_sequence
set next_je_sequence = next_je_sequence + 1
where SET_OF_BOOKS_ID = :NEW.SET_OF_BOOKS_ID and ORG_ID = Orgid and
PERIOD_NAME = :NEW.PERIOD_NAME;
END IF;
exception
when no_data_found then
insert into cux_gl_je_sequence
(set_of_books_id, org_id, period_name, next_je_sequence)
values
(:NEW.SET_OF_BOOKS_ID, orgid, :new.period_name, 2);
:new.doc_sequence_value := 1;
end;

触发时间是更新之前,因为是更新,所以涉及到更新前的值和更新的值,这样对于一行数据,就有两个前后的数据。:OLD.字段,表示更新之前原来的值,而:NEW.字段,表示更新的值。
这个清楚后,这个也就好理解了。
参考技术A vfvds bnvbmc

oracle用imp导入用户数据时,提示表或视图不存在

其他数据都能正常导入
但是有一个触发器导入的时候提示表或视图不存在
其他触发器都正常
表空间没问题
dmp里面有N个触发器 只有一个导不进去,有一个完全一样的触发器作用于另外一个表可以导入,应该与触发器没关系。至于重新编译..导都没导进来怎么重新编译...手工copy一下还可以...

把这个触发器重新编译一下可能就好了,如果编译还出错,那就按提示找原因,可能这个表或试图真的不存在,有可能这个表或试图没到进,或者是由数据库连接得到其他数据库的表。 参考技术A 你的dmp文件是用户(U)导出还是全库导出?如果是用户导出,就只导出一个用户的所有对象,如果触发器中使用了别的用户下的表或视图,就会报错。 参考技术B 在原库中查一下这个触发器,然后手工解决一下吧 参考技术C 查看你备份的.dmp文件的路径与你安装的数据库路径是否一样。

以上是关于请解释一下这个颇让oracle触发器的主要内容,如果未能解决你的问题,请参考以下文章

oracle中触发器问题

Oracle 触发器

oracle 类似dataguard,OGG等数据迁移后问题

Oracle不同版本执行相同SQL语句,结果不一样,请大神赐教

oracle用imp导入用户数据时,提示表或视图不存在

基本 Oracle 触发器审计表