2015-11-21 110 views
0

我寫了一篇關於我的Oracle數據庫的觸發器,但它給我這個錯誤:Oracle錯誤:ORA-00923:FROM關鍵字未找到預期

Compilation failed, line 11 (17:21:05) The line numbers associated 
with compilation errors are relative to the first BEGIN statement. 
This only affects the compilation of database triggers. PL/SQL: 
ORA-00923: FROM keyword not found where expectedCompilation failed, 
line 11 (17:21:05) The line numbers associated with compilation errors 
are relative to the first BEGIN statement. This only affects the 
compilation of database triggers. PL/SQL: SQL Statement ignored 

下面的代碼:

CREATE OR REPLACE TRIGGER BEGIN_CALL1 AFTER INSERT ON STATE_CHANGE 
FOR EACH ROW 
WHEN (NEW.ChangeType = 'C') 
    DECLARE 
    N   NUMBER; 
    N_1   NUMBER; 
    ID_CELL  NUMBER; 
    MC   NUMBER; 
    NUM_ATT  NUMBER; 
    PHONE_STATE CHAR(6); 
    X_0   NUMBER; 
    X_1   NUMBER; 
    Y_0   NUMBER; 
    Y_1   NUMBER; 
    BEGIN 
    SELECT COUNT(*) 
    INTO N 
    FROM CELL 
    WHERE ((x0 <= :NEW.x AND :NEW.x < x1) AND (y0 <= :NEW.y AND :NEW.y < y1)); 
    IF N <> 0 
    THEN --la cella di appartenenza esiste 
     SELECT CellId 
     INTO ID_CELL, x0 INTO X_0, y0 INTO Y_0, x1 INTO X_1,y1 INTO Y_1 
     FROM CELL 
     WHERE ((x0<=:NEW.x AND :NEW.x<x1) AND (y0<=:NEW.y AND :NEW.y<y1)); 
     SELECT COUNT(*) 
     INTO N 
     FROM TELEPHONE 
     WHERE PhoneNo = :NEW.PhoneNo; 
     IF (N <> 0) 
     THEN 
     SELECT COUNT(*) 
     INTO NUM_ATT 
     FROM TELEPHONE 
     WHERE (x >= X_0 AND x < X_1) AND (y >= Y_0 AND y < Y_1) 
       AND PhoneState = 'Active'; 
     SELECT MaxCalls 
     INTO MC 
     FROM CELL 
     WHERE CellId = ID_CELL; 
     IF ((NUM_ATT + 1) <= MC) 
     THEN 
      UPDATE TELEPHONE 
      SET PhoneState = 'Active' 
      WHERE PhoneNo = :NEW.PhoneNo; 
     ELSE 
      SELECT MAX(ExId) 
      INTO N 
      FROM EXCEPTION_LOG 
      WHERE CellId = ID_CELL; 
      IF (N IS NULL) 
      THEN N := 0; 
      END IF; 
      INSERT INTO EXCEPTION_LOG (ExId, CellId, ExceptionType) 
      VALUES (N + 1, ID_CELL, 'C'); 
     END IF; 
     ELSE 
     raise_application_error(-20003, 'Telephone switched off or unknown.'); 
     END IF; 
    ELSE 
     raise_application_error(-20001, 'Cell not recognized'); 
    END IF; 
    END; 

的錯誤應該在這裏(從BEGIN 11行):

SELECT COUNT(*) INTO N 
FROM TELEPHONE 
WHERE PhoneNo=:NEW.PhoneNo; 

但我不知道哪裏是錯誤。有人可以幫助我嗎?

回答

3

實際的錯誤是與前面的SQL語句: 而不是

SELECT CellId 
    INTO ID_CELL, x0 INTO X_0, y0 INTO Y_0, x1 INTO X_1,y1 INTO Y_1 
    FROM CELL 

你必須寫

SELECT CellId , x0 , y0 , x1 ,y1 
    INTO ID_CELL, X_0 , Y_0 , X_1 ,Y_1 
    FROM CELL 
相關問題