Oracle 错误:ORA-00923:未在预期位置找到 FROM 关键字

0 sql oracle triggers

我在我的 Oracle 数据库上写了一个触发器,但它显示了这个错误:

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
Run Code Online (Sandbox Code Playgroud)

这是代码:

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;
Run Code Online (Sandbox Code Playgroud)

错误应该在这里(从 BEGIN 开始的 11 行):

SELECT COUNT(*) INTO N
FROM TELEPHONE
WHERE PhoneNo=:NEW.PhoneNo;
Run Code Online (Sandbox Code Playgroud)

但我不知道错误在哪里。有人可以帮助我吗?

col*_*sar 6

实际错误在于前面的 sql 语句:而不是

  SELECT CellId
  INTO ID_CELL, x0 INTO X_0, y0 INTO Y_0, x1 INTO X_1,y1 INTO Y_1
  FROM CELL
Run Code Online (Sandbox Code Playgroud)

你必须写

  SELECT CellId , x0  , y0  , x1  ,y1
    INTO ID_CELL, X_0 , Y_0 , X_1 ,Y_1
    FROM CELL
Run Code Online (Sandbox Code Playgroud)