如果 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;
我认为 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;