代码之家  ›  专栏  ›  技术社区  ›  ThatDataGuy

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

  •  0
  • ThatDataGuy  · 技术社区  · 6 年前

    我有一个返回“坏”行的视图。如果视图返回任何记录,我希望有一个过程引发异常。我将从外部程序调用它。如何实现这一点?伪代码如下:

    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 回复  |  直到 6 年前
        1
  •  0
  •   Michel Milezzi    6 年前

    我知道有一个公认的答案,但让我告诉你另一种方法。 您不需要声明任何变量,因为您可以使用特殊变量 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;
    
        2
  •  0
  •   klin    6 年前

    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;