在 ORACLE 中执行此触发器时出现以下错误:
Table, View Or Sequence reference 'OCEX_COMI.FECHA_ASIG_GT' not allowed in this context.
这是我的触发器:
create or replace trigger ocex_comi_total
before insert or update of id_gt,fecha_asig_gt on ocex_comi
for each row
begin
if ((ocex_comi.fecha_asig_gt > to_date('2018-12-15','yyyy-mm-dd')) and
(ocex_comi.fecha_asig_gt < to_date('2019-01-01','yyyy-mm-dd')))
then
update ocex_comi cm set
cm.PAGO_COM = (select uea.total_bono_especial from OCEX_UEA uea
join OCEX_GUIA_TRANSITO gt on uea.id_uea = gt.dest_id
where gt.cod_gt=cm.id_gt)
where cm.id_gt = (select gt.cod_gt from ocex_guia_transito gt JOIN
ocex_uea uea on uea.id_uea=gt.dest_id
where gt.cod_gt=cm.id_gt);
else
update ocex_comi cm set
cm.PAGO_COM = (select uea.total_x_pnp from OCEX_UEA uea
join OCEX_GUIA_TRANSITO gt on uea.id_uea = gt.dest_id
where gt.cod_gt=cm.id_gt)
where cm.id_gt = (select gt.cod_gt from ocex_guia_transito gt JOIN
ocex_uea uea on uea.id_uea=gt.dest_id
where gt.cod_gt=cm.id_gt);
end if;
end;
好吧,我试图做的是,有了这个触发器,表“ocex_comi”的“PAGO_COM”列会自动从“ocex_uea”表中填充,这要归功于“total_bono_special”列(如果字段的日期“ date_asig_gt”包含)在 15-dec 到 31-dec 之间),如果没有,请填写“total_x_pnp”列(如果“fecha_asig_gt”字段的日期不在 15-dec 到 31-dec 之间。)一些想法或帮助我遇到了错误,谢谢。
不要直接引用表格列;你需要参考的new
pseudorecord:
if ((:new.fecha_asig_gt > to_date('2018-12-15','yyyy-mm-dd')) and
(:new.fecha_asig_gt < to_date('2019-01-01','yyyy-mm-dd')))
then
虽然我会使用日期文字:
if :new.fecha_asig_gt > date '2018-12-15' and
:new.fecha_asig_gt < date '2019-01-01'
then
(但不确定您是否真的想要>=
而不是>
。)
但是您还尝试更新逻辑的每个分支内表中的所有行,这听起来无论如何都不是您真正想要做的事情,并且如果您尝试,这将在运行时导致表发生变异错误。
不太清楚你的意图是什么,但我认为你想要更像:
...
then
select uea.total_bono_especial
into :new.PAGO_COM
from OCEX_UEA uea
join OCEX_GUIA_TRANSITO gt on uea.id_uea = gt.dest_id
where gt.cod_gt = :new.id_gt;
else
...
在另一个分支中也有同样的事情。
由于这些查询非常相似,您可以用单个查询替换 if/else 逻辑,whoch 使用 case 表达式来决定要返回两个列值中的哪一个。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句