Oracle 在PL/SQL:ORA-00933上卡住:SQL命令未正确结束
我看不出我的错误。我标记了SQL开发人员引用错误的位置。你能看出我错在哪里吗?ZCTA5_2000是一个包含数据的有效表Oracle 在PL/SQL:ORA-00933上卡住:SQL命令未正确结束,oracle,plsql,triggers,plsqldeveloper,Oracle,Plsql,Triggers,Plsqldeveloper,我看不出我的错误。我标记了SQL开发人员引用错误的位置。你能看出我错在哪里吗?ZCTA5_2000是一个包含数据的有效表 CREATE OR REPLACE TRIGGER zip_trigger BEFORE INSERT ON ZCTA5_2000 FOR EACH ROW DECLARE low_zip NUMBER(5); high_zip NUMBER(5); <--- Error PL/SQL: SQL Statement ignored ****** B
CREATE OR REPLACE TRIGGER zip_trigger
BEFORE INSERT ON ZCTA5_2000
FOR EACH ROW
DECLARE
low_zip NUMBER(5);
high_zip NUMBER(5); <--- Error PL/SQL: SQL Statement ignored ******
BEGIN <-----Error PL/SQL: ORA-00933: SQL command not properly ended ********
SELECT LOW_ZIP, HIGH_ZIP FROM ZIPTABLE
INTO low_zip, high_zip
WHERE :NEW.STATE = STATE_CODE; <--- Error PLS-00103: Encountered the symbol "END"...
IF :NEW.ZIP < LOW_ZIP OR :NEW.ZIP>HIGH_ZIP
END IF;
END;
创建或替换触发器zip\u触发器
在ZCTA5_2000上插入之前
每行
声明
低邮政编码(5);
高邮政编码(5) 看起来向您报告的行号不正确。一些前端可以做到这一点
请注意,PLS-00103:遇到的符号“END”
消息太快了三行。假设对ORA-00933
消息使用相同的方法,则意味着它实际上指向SELECT
语句,这就是错误所在:
SELECT LOW_ZIP, HIGH_ZIP FROM ZIPTABLE
INTO low_zip, high_zip <== INTO should be before FROM
...
可能有不止一个错误:
CREATE OR REPLACE TRIGGER zip_trigger
BEFORE INSERT ON ZCTA5_2000
FOR EACH ROW
DECLARE
low_zip NUMBER(5);
high_zip NUMBER(5);
BEGIN
SELECT LOW_ZIP, HIGH_ZIP INTO low_zip, high_zip
FROM ZIPTABLE
WHERE :NEW.STATE = STATE_CODE;
IF :NEW.ZIP < LOW_ZIP OR :NEW.ZIP > HIGH_ZIP THEN
NULL;
END IF;
END;
/
创建或替换触发器zip\u触发器
在ZCTA5_2000上插入之前
每行
声明
低邮政编码(5);
高邮政编码(5);
开始
选择LOW_-ZIP,HIGH_-ZIP进入LOW_-ZIP,HIGH_-ZIP
从ZIPTABLE
其中:NEW.STATE=状态\代码;
如果:NEW.ZIPHIGH\u-ZIP,则
无效的
如果结束;
结束;
/
注意重新排列的SELECT
语句(SELECT…INTO…FROM
而不是SELECT…FROM…INTO
)和固定的IF
语句(然后关键字和IF
块内的伪语句) FROM
在之后进入,并且之后必须有一个然后如果如果是真的,那么你也应该做些什么
CREATE OR REPLACE TRIGGER zip_trigger
BEFORE INSERT ON ZCTA5_2000
FOR EACH ROW
DECLARE
low_zip NUMBER(5);
high_zip NUMBER(5);
BEGIN
SELECT LOW_ZIP, HIGH_ZIP
INTO low_zip, high_zip
FROM ZIPTABLE
WHERE :NEW.STATE = STATE_CODE;
IF :NEW.ZIP < LOW_ZIP OR :NEW.ZIP > HIGH_ZIP THEN
null;
END IF;
END;
创建或替换触发器zip\u触发器
在ZCTA5_2000上插入之前
每行
声明
低邮政编码(5);
高邮政编码(5);
开始
选择低拉链、高拉链
分为低拉链、高拉链
从ZIPTABLE
其中:NEW.STATE=状态\代码;
如果:NEW.ZIPHIGH\u-ZIP,则
无效的
如果结束;
结束;
你一定是在开玩笑!我们不会在你的代码中搜索语法错误。呃,这里有很多人会这样做。你知道邮政编码不是各州独有的,也不是按范围分配给各州的,对吗?而且有些邮政编码与州根本不相关。是的。如图所示,更改select和if后,它编译时无错误。谢谢你的帮助。同意并在更改后编译。谢谢你,这也是一个非常有用的评论。非常感谢。不再把头撞在墙上:)
CREATE OR REPLACE TRIGGER zip_trigger
BEFORE INSERT ON ZCTA5_2000
FOR EACH ROW
DECLARE
low_zip NUMBER(5);
high_zip NUMBER(5);
BEGIN
SELECT LOW_ZIP, HIGH_ZIP
INTO low_zip, high_zip
FROM ZIPTABLE
WHERE :NEW.STATE = STATE_CODE;
IF :NEW.ZIP < LOW_ZIP OR :NEW.ZIP > HIGH_ZIP THEN
null;
END IF;
END;