2016-11-10 85 views
1

这是我打电话的过程:我称它是触发内如何在程序中将返回值赋给Firebird中的新变量?

set term # ; 
create procedure f_rating(budget int) 
returns (final_result varchar(5)) 
as 
begin 
if (budget <= 500000) then final_result = 'LOW'; 
else if (budget <= 850000) then final_result = 'MID'; 
else if (budget <= 1200000) then final_result = 'HIGH'; 
else if (budget > 1200000) then final_result = 'ULTRA'; 
end # 
commit work # 

set term # ; 
CREATE TRIGGER tr_department_rating_insert for department_tester after insert 
as 
begin 
select result from f_rating(NEW.budget) into :temp_rating; 
update department_rating 
    set occurrences = occurrences + 1 
    where rating = temp_rating; 
end # 
commit work # 

我敢肯定它可能是一个愚蠢的语法错误,但我想不出它出。

+0

如果使用火鸟3,那么你应该考虑更换该带有函数的存储过程。 –

回答

1

f_rating不可选的存储过程(它并没有在它SUSPEND)这样的语法来调用它是EXECUTE PROCEDURE <name> RETURNING_VALUES(<params>);,即

set term # ; 
CREATE TRIGGER tr_department_rating_insert for department_tester after insert 
as 
begin 
EXECUTE PROCEDURE f_rating(NEW.budget) RETURNING_VALUES(:temp_rating); 
update department_rating 
    set occurrences = occurrences + 1 
    where rating = temp_rating; 
end # 
commit work #