Sql PLS-00103:遇到符号“;如果;当预期以下情况之一时:&书信电报;标识符>&书信电报;双引号分隔标识符>;
我不断地犯这些错误,但似乎不知道为什么。我是oracle sql新手,因此欢迎提供任何帮助!提前谢谢Sql PLS-00103:遇到符号“;如果;当预期以下情况之一时:&书信电报;标识符>&书信电报;双引号分隔标识符>;,sql,oracle,plsql,database-trigger,Sql,Oracle,Plsql,Database Trigger,我不断地犯这些错误,但似乎不知道为什么。我是oracle sql新手,因此欢迎提供任何帮助!提前谢谢 CREATE OR REPLACE TRIGGER TRIGER1 AFTER DELETE OR INSERT ON LAB6_BILETI FOR EACH ROW DECLARE CNT NUMBER; CNP NUMBER; BEGIN SELECT COUNT(*) FROM T1 WHERE T1.T=:OLD.T INTO CNT IF CNT=0 THE
CREATE OR REPLACE TRIGGER TRIGER1 AFTER DELETE OR INSERT ON LAB6_BILETI
FOR EACH ROW
DECLARE
CNT NUMBER;
CNP NUMBER;
BEGIN
SELECT COUNT(*) FROM T1 WHERE T1.T=:OLD.T INTO CNT
IF CNT=0 THEN
UPDATE T2 SET VP=1 WHERE T2.T=:old.T;
END IF;
SELECT COUNT(*) FROM T1 WHERE T1.T=:old.T AND T1.P=:old.P INTO CNP;
IF CNP=0 AND CNT!=0 THEN
UPDATE T2 SET VK=VK+1 WHERE T2.T=:old.T;
END IF;
END;
错误:
编译失败,第6行(16:27:48)与之关联的行号 编译错误与第一个BEGIN语句有关。这 仅影响数据库触发器的编译。
PL/SQL:ORA-00933:SQL命令未正确结束
编译失败,第5行(16:27:48)
PL/SQL:SQL语句忽略编译失败,第7行(16:27:48)
PL/SQL:ORA-00933:SQL命令未正确结束编译失败,第7行(16:27:48)
PL/SQL:SQL语句忽略编译失败,第11行(16:27:48)
PLS-00103:遇到符号“如果”时 应为以下情况之一:
;
您发布的触发器代码有几个语法错误和一些逻辑错误 语法错误是
- 在常规PL/SQL中,INTO子句直接位于SELECT投影之后,FROM子句之前
- 第一个SELECT语句后缺少分号
:old
命名空间为空,因此所选计数将始终为零,更新将丢失。(这可能是您的意图,但如果是这样,您应该对此注释代码。)更改此名称空间并不像替换:new
名称空间那样简单,因为删除时名称空间将为空
CREATE OR REPLACE TRIGGER TRIGER1 AFTER DELETE OR INSERT ON LAB6_BILETI
FOR EACH ROW
DECLARE
CNT NUMBER;
CNP NUMBER;
l_t t1.t%type;
l_p t1.p%type;
BEGIN
if deleting then
l_t := :OLD.T ;
l_p := :OLD.P ;
else -- inserting
l_t := :NEW.T ;
l_p := :NEW.P ;
end if;
SELECT COUNT(*) INTO CNT
FROM T1
WHERE T1.T= l_t ;
IF CNT=0 THEN
UPDATE T2
SET VP=1
WHERE T2.T= l_t;
END IF;
SELECT COUNT(*) INTO CNP
FROM T1
WHERE T1.T= l_t
AND T1.P= l_p;
IF CNP=0 AND CNT!=0 THEN
UPDATE T2
SET VK=VK+1
WHERE T2.T= l_t;
END IF;
END;
你应该在
选择COUNT(*)
之后将带进CNP
和带进CNT一样的东西
@BarbarosÖzhan我刚刚做了,我仍然会出错:/顺便说一句,我不知道你在用什么工具,但是与触发器编译错误相关联的行号是相对于第一个begin
或declare
的。在本例中,它指的是从xxx到yyy的选择计数(*)行中的关键字顺序错误,这应该是@BarbarosÖzhan提到的从xxx到yyy的选择计数(*)行。谢谢你,你甚至帮我解决了一个我不知道的问题!