【问题标题】:Sql If statement errorSql If 语句错误
【发布时间】:2017-05-04 09:42:57
【问题描述】:

有人帮我找出错误

CREATE OR REPLACE TRIGGER CREAT_SERVIÇO 
BEFORE INSERT ON SERVIÇO 
BEGIN
  if((SELECT MORADA_RUA FROM SERVIÇO)=NULL and (SELECT LOCAIS_ID_LOCAL FROM SERVIÇO) = NULL) = TRUE
   THEN
      RAISE_APPLICATION_ERROR(-20000, 'YOU HAVE TO HAVE AN ADRESS OR AN LOCAL');
END IF;
END;

错误:

  • 错误(4,7):PLS-00103:在预期以下情况之一时遇到符号“SELECT”:(-+ case mod new not null continue avg count current exists max min prior sql stddev sum variance执行forall合并时间时间戳间隔日期管道

  • 错误(4,39):PLS-00103:在预期以下情况之一时遇到符号“=”:),或者符号“)”被替换为“=”以继续。

  • 错误(4,50):PLS-00103:在预期以下情况之一时遇到符号“SELECT”:(-+ case mod new not null continue avg count current exists max min prior sql stddev sum variance执行forall合并时间时间戳间隔日期管道

  • 错误(4,88):PLS-00103:在预期以下之一时遇到符号“=”:) 和或

  • 错误(5,4):PLS-00103:在预期以下情况之一时遇到符号“THEN”:. ( ) , * @ % & - + / at mod 余数 rem 和 or ||多集

  • 错误(7,9):PLS-00103:在预期以下情况之一时遇到符号“IF”:;当前删除之前存在

【问题讨论】:

  • 不用喊了。此外,如果您遇到一些错误,了解您遇到的什么错误将非常有帮助。
  • 发布错误信息
  • edit 您的问题并添加您收到的确切错误消息(不要在 cmets 中发布其他信息)
  • 出现错误更新
  • PL/SQL 中没有if (select) 构造。顺便说一句,您的错误消息 'YOU HAVE TO HAVE AN ADRESS OR AN LOCAL' 毫无意义。

标签: oracle plsql


【解决方案1】:

我认为你需要:

CREATE OR REPLACE TRIGGER CREAT_SERVIÇO 
BEFORE INSERT ON SERVIÇO FOR EACH ROW
BEGIN

  if(:new.MORADA_RUA is NULL and :NEW.LOCAIS_ID_LOCAL is NULL) THEN
      RAISE_APPLICATION_ERROR(-20000, 'YOU HAVE TO HAVE AN ADRESS OR AN LOCAL');
END IF;
END;

如果您的触发器在地址和本地都为空时不允许插入。但要做到这一点,最好使用检查 ADDRESS || LOCAL 是否为空的约束。

【讨论】:

  • 我支持避免使用触发器并改为使用约束的建议
  • 你说得对,FOR EACH ROW 不见了。立即尝试
  • @Boneist 可能作为大多数触发问题,它是一种家庭作业;)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-04-28
  • 1970-01-01
  • 2011-09-22
  • 2017-05-29
  • 2014-06-20
  • 2013-04-09
  • 1970-01-01
相关资源
最近更新 更多