我在我的 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)
但我不知道错误在哪里。有人可以帮助我吗?
实际错误在于前面的 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)
| 归档时间: |
|
| 查看次数: |
1439 次 |
| 最近记录: |