在postgreSQL中引发错误

use*_*308 7 postgresql plpgsql quoting

CREATE OR REPLACE FUNCTION msgfailerror() RETURNS trigger AS 
' BEGIN 
    IF NEW.noces< new.first_column THEN 
        RAISE EXCEPTION 'cannot have a negative salary'; 
    END IF; 
   return new; 
END' LANGUAGE plpgsql
Run Code Online (Sandbox Code Playgroud)

触发

create trigger msgfail before insert on first for each row 
execute procedure msgfailerror()
Run Code Online (Sandbox Code Playgroud)

给出错误:

"不能"或其附近的语法错误第5行:RAISE EXCEPTION'不能有负面...

对于每个行字段,我几乎有一个验证.我希望触发器在插入完成时检查所有验证,然后一次性提高错误日志.我应该在加薪通知中使用加薪例外吗?

例如:

Insert into first (first_column, noces,dob) values ('4545','75','545') 
Run Code Online (Sandbox Code Playgroud)

我正在检查noces是否小于first_column,对于同一行我想检查dob> 80以及first_column是否为整数并且为所有验证引发错误.提前致谢

Fra*_*ens 20

引用是错误的.使用美元报价$$更容易:

CREATE OR REPLACE FUNCTION msgfailerror() 
RETURNS trigger AS 
$$
BEGIN 
  IF NEW.noces< new.first_column THEN 
    RAISE EXCEPTION 'cannot have a negative salary'; 
  END IF; 
  return new; 
END;
$$
LANGUAGE plpgsql;
Run Code Online (Sandbox Code Playgroud)

但另一方面,检查约束有什么问题?

  • 检查约束的另一个+1 (3认同)

Meh*_*ian 5

你没有什么问题,唯一的问题是使用引号

请更换 :

RAISE EXCEPTION 'cannot have a negative salary';
Run Code Online (Sandbox Code Playgroud)

到:

RAISE EXCEPTION ''cannot have a negative salary'';
Run Code Online (Sandbox Code Playgroud)

'' 与 '' 不同

'' = 两个单引号