Как вызвать ошибку, если запрос на выборку возвращает строки - PullRequest
0 голосов
/ 05 февраля 2019

У меня есть представление, которое возвращает «плохие» строки.Я хотел бы, чтобы процедура вызывала исключение, если представление возвращает какие-либо записи.Я назову это из внешней программы.Как это можно реализовать?Далее следует псевдокод:

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
$$;

Ответы [ 2 ]

0 голосов
/ 05 февраля 2019

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;
0 голосов
/ 05 февраля 2019

Я знаю, что есть принятый ответ, но позвольте мне показать вам другой подход.Вам не нужно объявлять какие-либо переменные, поскольку вы можете использовать специальную переменную 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;
...