如果 select 查询 returns 行,如何引发错误

How to raise an error if a select query returns rows

我认为 returns 'bad' 行。如果视图 returns 有任何记录,我想要一个程序来引发异常。我将从外部程序调用它。如何实施?伪代码如下:

create procedure pr_bad_records_check()
language sql
as
$$
if 
    select count(*) from vw_my_bad_records > 0
then 
    raise error 'some bad rows were found, run select * from vw_my_bad_records for details'
end if
$$;

我知道有一个可接受的答案,但让我向您展示另一种方法。 您不需要声明任何变量,因为您可以使用特殊变量 FOUND。 此外,最好在 select 中添加一个 LIMIT 子句,因为一行足以引发异常:

CREATE OR REPLACE FUNCTION pr_bad_records_check() RETURNS void AS $$
BEGIN 
  PERFORM * FROM vw_my_bad_records LIMIT 1;
  IF FOUND THEN 
    RAISE EXCEPTION 'some bad rows were found, run select * from vw_my_bad_records for details'; 
  END IF; 
END;
$$ LANGUAGE plpgsql;

PLpgSQL 允许在表达式中使用 SQL 查询。所以你的任务可以有一个简单、可读和快速的解决方案:

CREATE OR REPLACE FUNCTION pr_bad_records_check()
RETURNS void AS $$
BEGIN
  IF EXISTS(SELECT * FROM vw_my_bad_records) THEN
    RAISE EXCEPTION
       USING MESSAGE='some bad rows were found',
             HINT='Run select * from vw_my_bad_records for details.';
  END IF;
END;
$$ LANGUAGE plpgsql;