2017-02-01 6 views
-1

Я не могу выполнить процедуру, то состояние ошибки:Синтаксическая ошибка при создании хранимой процедуры в IBM DB2

неожиданный маркер «END-OF-ЗАЯВЛЕНИЕ» был найден следующий «ent.payment_id) * 0,50" . Ожидаемые жетоны могут включать: "". НОМЕР ЛИНИИ = 6. SQLSTATE = 42601.

Эта процедура должна обновлять общую стоимость, когда код действителен. Я пробую два способа сделать это. Может ли кто-нибудь помочь?

create procedure Prc_Discount(in code char(3), payment_id integer) 
begin 
if (code ='abc')then 
update payment 
set new.total_price =(select total_price from payment 
where new.payment_id=payment.payment_id)*0.50; 
else 
if (code ='bac')then 
update payment 
set new.total_price =(select total_price from payment 
where new.payment_id=payment.payment_id)*0.75; 
else 
if (code ='cba')then 
update payment 
set new.total_price =(select total_price from payment 
where new.payment_id=payment.payment_id)*0.90; 
end if; 
[email protected] 

Еще одна попытка:

create procedure Prc_Discount(in code char(3), payment_id integer) 
begin 
case code 
    when abc then      
     update payment 
     set new.total_price =(select total_price from payment 
     where new.payment_id=payment.payment_id)*0.50;   
    when acd then              
     update payment 
     set new.total_price =(select total_price from payment 
     where new.payment_id=payment.payment_id)*0.75; 
    else  
     update payment 
     set new.total_price =(select total_price from payment 
     where new.payment_id=payment.payment_id)*0.90;   
end case; 
[email protected] 
+0

Как связано это Java? –

+0

@HovercraftFullOfEels жаль, что не связано вообще. – student

+1

Тогда, пожалуйста, удалите запутанный тег вопроса Java. Я не могу сделать это, поскольку в вашем вопросе есть редактирование. –

ответ

0

попробовать это в вашей процедуре

update payment f1 
set f1.total_price = 
     case 
     when code ='abc' then 0.50 * f1.total_price 
     when code ='bac' then 0.75 * f1.total_price 
     when code ='cba' then 0.90 * f1.total_price 
     else f1.total_price 
     end 
where code in ('abc', 'bac', 'cba')