Не обращайтесь непосредственно к столбцу таблицы; вам нужно сослаться на псевдокорд new
:
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, чтобы решить, какое из двух значений столбца вернуть.