2015-01-04 97 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

相关问题