我有一个返回“坏”行的视图。如果视图返回任何记录,我想要一个引发异常的过程。我将从外部程序中调用它。如何实现呢?伪代码如下:
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
$$;
答案 0 :(得分:0)
我知道有一个可以接受的答案,但是让我向您展示另一种方法。
由于可以使用特殊变量FOUND
,因此不需要声明任何变量。
另外,最好在您的选择中添加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;
答案 1 :(得分:0)
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;