Quizás peque de ignorante, pero creo que un Select no devuelver un valor, ni se puede evaluar como un resultado. Yo lo haría así:
Código:
AS
DECLARE VARIABLE Valor FLOAT;
begin
if (New.costounitario <> Old.costounitario) then begin
Insert Into Historicocostos (codigo, codigoproducto, costoanterior, costonuevo, fechacambio, UsuarioCambio)
values (Coalesce((Select Max(Codigo) from HistoricoCostos
where codigoproducto = new.codigo), 0) + 1, new.codigo, Old.costounitario, New.costounitario, current_date, New.UsuarioModificado);
New.ultimocosto = Old.costounitario;
if (New.costopromedio <> 0) then
begin
select avg(costonuevo) from historicocostos
where codigoproducto = New.codigo
into :Valor;
New.CostoPromedio = Valor;
end
else
begin
New.costopromedio = New.costounitario;
end
endend
Saludos