【问题标题】:plpgsql procedure: how to add auto_increment field to a queryplpgsql 过程:如何将 auto_increment 字段添加到查询中
【发布时间】:2017-05-24 09:57:02
【问题描述】:

我有以下 plpgsql 过程/函数,我试图在其中获取一组具有 Auto_increment 值的记录。我已经编写了字段“位置”来存储自动增量,我猜这是错误的,但我不知道如何在要添加新计算字段的地方执行此查询。我想我的意图很明确。有人可以帮我吗?拜托!

CREATE OR REPLACE FUNCTION pra2.GetRankingOfPilots(IN sea pra2.season.name%type)
RETURNS setof RECORD AS $BODY$
DECLARE
    r RECORD;
    fila integer;
BEGIN
    fila:=0;
    FOR r IN SELECT  
          position,
          driver.name driver, 
          constructor.name constructor,
          season.name season,
          CAST(sum(runs.points) AS int) totalpuntos
        FROM 
          pra2.hired hired
        INNER JOIN pra2.constructor on  hired.name_constructor = pra2.constructor.name
        INNER JOIN pra2.driver on hired.num_driver = pra2.driver.num
        INNER JOIN pra2.runs on pra2.driver.num=pra2.runs.num_driver
        INNER JOIN pra2.race on pra2.runs.name_race=pra2.race.name AND pra2.runs.season_fk=pra2.race.season_fk AND pra2.runs.season_fk=pra2.race.season_fk
        INNER JOIN pra2.season on hired.name_season=pra2.season.name AND pra2.race.season_fk=pra2.season.name
        WHERE
            pra2.season.name=sea
        GROUP BY
            season,driver,constructor
        ORDER BY
            TotalPuntos Desc
    LOOP
        fila:=fila+1;
        r.posicion:=fila;
        RETURN NEXT r;
    END LOOP;
RETURN;
END; 
$BODY$ 
LANGUAGE plpgsql;

提前谢谢你!!

【问题讨论】:

    标签: sql postgresql stored-procedures plpgsql


    【解决方案1】:

    尝试:

    SELECT  
              row_number() over () position,
              driver.name driver, 
              constructor.name constructor,
              season.name season,
              CAST(sum(runs.points) AS int) totalpuntos
            FROM 
              pra2.hired hired
            INNER JOIN pra2.constructor on  hired.name_constructor = pra2.constructor.name
            INNER JOIN pra2.driver on hired.num_driver = pra2.driver.num
            INNER JOIN pra2.runs on pra2.driver.num=pra2.runs.num_driver
            INNER JOIN pra2.race on pra2.runs.name_race=pra2.race.name AND pra2.runs.season_fk=pra2.race.season_fk AND pra2.runs.season_fk=pra2.race.season_fk
            INNER JOIN pra2.season on hired.name_season=pra2.season.name AND pra2.race.season_fk=pra2.season.name
            WHERE
                pra2.season.name=sea
            GROUP BY
                season,driver,constructor
            ORDER BY
                TotalPuntos Desc
    

    【讨论】:

    • 我得到类型的错误,说我不能改变创建函数的返回类型
    • 删除它并重新创建
    • 或将 bigint 转换为之前的任何内容
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-10
    • 2019-11-11
    • 1970-01-01
    • 1970-01-01
    • 2019-12-12
    相关资源
    最近更新 更多