繁体   English   中英

IF ELSE 在 postgresql function

[英]IF ELSE in postgresql function

我正在尝试创建一个 function 如下

create function public.getSomething(
        value1 integer
    )
      returns table (
             id integer,
             name varchar(20)
    
              ) as
    $$
    BEGIN
    
        IF value1 = 0 THEN
        
            select a.id, b.name from table1 a inner join table2 b on a.Something = b.Something where 
            a.column = something and b.column = something;
            
        END IF;
    
        IF value1 = 1 THEN
        
            select a.id, b.name from table1 a inner join table2 b on a.Something = b.Something where 
            a.column = something and b.column = something;
            
        END IF;
    
    END;
            
    $$ language SQL;

但是当我尝试创建时,我收到以下错误

ERROR:  syntax error at or near "if" 

我尝试将语言从 SQL 更改为 plpgsql。 但这次我得到

Error: query has no destination for result data
Hint: if you want to discard the results of a select use perform instead

然后我用Perform替换了Select 这次创建了 function 但是当我调用它时没有结果!

我究竟做错了什么? 有没有其他选择? 我正在使用 postgres 版本 12.3

您的 function 稍作修改(大写):

  1. 语言plpgsql;
  2. 在 SQL function 中,您只需返回查询的结果。 在 plpgsql function 中,您必须使用RETURN语句返回任何内容。 由于您不想丢弃查询结果而是返回它们,因此在 SELECT 语句之前添加RETURN QUERY
create OR REPLACE function public.getSomething(value1 integer)
returns table (id integer, name varchar(20)) as
$$
    BEGIN

        IF value1 = 0 THEN
            RETURN QUERY select a.id, b.name from table1 a inner join table2 b on a.Something = b.Something where 
            a.column = something and b.column = something;
        END IF;

        IF value1 = 1 THEN
            RETURN QUERY select a.id, b.name from table1 a inner join table2 b on a.Something = b.Something where 
            a.column = something and b.column = something;
        END IF;

    END;
            
$$ language PLPGSQL;

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM