2016-06-12 38 views
0

當創建下面的觸發器時,我得到了低於錯誤:任何線索如何解決它?使用案例來分配值

13 32 PLS-00103:期待以下某項時遇到符號「WHEN」:。 (* @%& = - + < />在國防部是不餘REM然後<>或=或〜=> = < = <>和或類似

create or replace trigger "CONVEYANCE_REQUEST_T3" 
BEFORE 
insert or update on "CONVEYANCE_REQUEST" 
for each row 
begin 

CASE 
when :NEW.REGULAR_TRAVEL_MODE = '2 WHEELER' THEN 
BEGIN 
    CASE 
     when :NEW.WAY_TYPE = 'ONE WAY' THEN 
       SELECT RATE_PER_KM * :NEW.REGULAR_DISTANCE_ONEWAY * 1 INTO :NEW.REGULAR_AMOUNT FROM CONVEYANCE_RATE WHERE TRAVEL_MODE = :NEW.REGULAR_TRAVEL_MODE; 
     WHEN :NEW.WAY_TYPE ='TWO WAY' THEN 
       SELECT RATE_PER_KM * :NEW.REGULAR_DISTANCE_ONEWAY * 2 INTO :NEW.REGULAR_AMOUNT FROM CONVEYANCE_RATE WHERE TRAVEL_MODE = :NEW.REGULAR_TRAVEL_MODE; 
    END CASE; 
END; 
when :NEW.REGULAR_TRAVEL_MODE WHEN = '4 WHEELER' THEN 
BEGIN 
    CASE 
     when :NEW.WAY_TYPE = 'ONE WAY' THEN 
       SELECT RATE_PER_KM * :NEW.REGULAR_DISTANCE_ONEWAY * 1 INTO :NEW.REGULAR_AMOUNT FROM CONVEYANCE_RATE WHERE TRAVEL_MODE = :NEW.REGULAR_TRAVEL_MODE; 
     WHEN :NEW.WAY_TYPE ='TWO WAY' THEN 
       SELECT RATE_PER_KM * :NEW.REGULAR_DISTANCE_ONEWAY * 2 INTO :NEW.REGULAR_AMOUNT FROM CONVEYANCE_RATE WHERE TRAVEL_MODE = :NEW.REGULAR_TRAVEL_MODE; 
    END CASE; 
END; 


END CASE; 
END; 
+0

when :NEW.REGULAR_TRAVEL_MODE WHEN = '4 WHEELER' THEN 

試試到底是該觸發器應該怎麼辦? – Mureinik

+0

你的END數量已經搞砸了。每個CASE語句需要一個END,而觸發器代碼塊的BEGIN需要一個END。你可能在你的CASE語句中也有一個你不需要的BEGIN。 http://www.techonthenet.com/oracle/functions/case.php –

+0

您對CASE聲明的構造對我來說看起來不對。看看我上面評論中的正確書寫的鏈接和語法大綱。 –

回答

1

你不能做some_variable := (SELECT some_column FROM ...)!相反,做所有的查詢中的計算和分配使用SELECT ... INTO的結果。例如,這裏是如何做到第一分配:NEW.REGULAR_AMOUNT

SELECT RATE_PER_KM * :NEW.REGULAR_DISTANCE_ONEWAY * 1 
    INTO :NEW.REGULAR_AMOUNT 
    FROM CONVEYANCE_RATE ... 

我會讓你來對付剩下的案例。

+0

謝謝盧克。如你所示。錯誤現在已經減少到只有1,但仍然無法弄清楚如何排除它。我已經分享了上面的新代碼。感謝您的支持。 – Teju

+0

非常感謝盧克。我想到了 。一個額外的'當'擰了起來。 – Teju

+0

如果問題解決了,請將答案標記爲正確。 –

0

有附加在以下線的時候。與下面的代碼

when :NEW.REGULAR_TRAVEL_MODE = '4 WHEELER' THEN