2015-01-04 55 views
-5

編譯失敗,第10行(14:27:16)
與編譯錯誤關聯的行號與第一個BEGIN語句相關。這隻影響數據庫觸發器的編譯。PLS-00103:遇到符號「;」當期望以下之一時:。 ()* @%& - +/

PLS-00103:遇到符號「;」當期望以下之一時:。 ()* @%& - +/at mod remaining rem with and or or group having intersect minus start union union where || multiset 符號「;」被忽略了。**

create or replace trigger "PROMOS_T2" 
    BEFORE insert or update on "PROMOS"  
    for each row  
DECLARE  
    ma_exp1 EXCEPTION;  
    ma_exp2 EXCEPTION;  
    ma_exp3 EXCEPTION; 
    cap LOGTS.CAPACITE%TYPE;  
    nbr INTEGER;  
begin 
    SELECT COUNT (*) INTO nbr FROM LOGTS WHERE :NEW."IDLOG"=IDLOG; 
    SELECT CAPACITE INTO cap FROM LOGTS WHERE :NEW."IDLOG"=IDLOG; 
    if (exists(SELECT * FROM PROMOS WHERE :NEW."IDPROMO"=IDPROMO;))THEN 
    RAISE ma_exp1; 
    elsif nbr=1 AND cap < :NEW."NBPLACES" THEN 
    RAISE ma_exp2; 
    else 
    RAISE ma_exp3; 
    end if; 
EXCEPTION 
    WHEN ma_exp1 THEN 
    RAISE_APPLICATION_ERROR(-20004,'la promos dèja existe'); 
    WHEN ma_exp2 THEN 
    RAISE_APPLICATION_ERROR(-20005,'PAS DE PLACE'); 
    WHEN ma_exp3 THEN 
    RAISE_APPLICATION_ERROR(-20006,'IDLOG nexiste pas'); 
end; 

回答

2

看看錯誤信息,特別是

編譯失敗的部分,10號線

遇到符號「;」

這是第10行:

if (exists(SELECT * FROM PROMOS WHERE :NEW."IDPROMO"=IDPROMO;))THEN 

看這個問題?

您的編譯錯誤是由該行中的分號引起的。刪除它將有所幫助,但是您的代碼仍然無法編譯,因爲您不能在SQL以外的PL/SQL中調用EXISTS。爲了解決這個問題,see the answers to this question

相關問題