【问题标题】:Postgres sql return valuePostgreSQL 返回值
【发布时间】:2016-12-22 17:44:45
【问题描述】:

我尝试从具有不同表的两列中获取所有记录并在彼此之间进行划分,但我只有第一行而不是所有行的结果我该如何解决这个问题?

CREATE FUNCTION human() RETURNS integer AS $$
    DECLARE person integer;
    size integer;
    def integer;
    Begin

    Select sizex into size from region;
     Select defx into def from humans;
    osoba = def / size;
    return person;
    END;
$$ LANGUAGE 'plpgsql';

select human();

【问题讨论】:

    标签: postgresql function stored-procedures


    【解决方案1】:

    假设您的“humans”表和“region”表都有一个 ID 字段。并且还假设您的 human 表有一个 regionId 字段在您的两个表之间创建关系,我建议您执行以下操作:

    CREATE FUNCTION human(arg_humanId int) RETURNS decimal AS $$
        DECLARE
          div_result decimal;
        Begin
    
          SELECT h.defx/r.sizex
            INTO result
            FROM humans h
            JOIN region r on r.ID = h.RegionID
           WHERE h.ID = arg_humanId;
          RETURN div_result;
        END;
    $$ LANGUAGE 'plpgsql';
    
    SELECT human(h.ID)
      FROM humans h;
    

    请注意,我已将数据类型从整数更改为小数,因为除法通常会产生小数位。

    另一种选择是返回 setof 个小数并执行函数内部的所有逻辑:

    CREATE FUNCTION human() RETURNS setof decimal AS $$
        DECLARE
          div_result decimal;
        Begin
          RETURN QUERY
          SELECT h.defx/r.sizex
            FROM humans h
            JOIN region r on r.ID = h.RegionID;
        END;
    $$ LANGUAGE 'plpgsql';
    
    SELECT *
      FROM human();
    

    【讨论】:

      猜你喜欢
      • 2012-06-15
      • 1970-01-01
      • 2018-12-16
      • 2018-06-03
      • 1970-01-01
      • 1970-01-01
      • 2014-05-28
      • 2014-03-23
      • 2018-11-19
      相关资源
      最近更新 更多