PostgreSQL
 sql >> Base de Dados >  >> RDS >> PostgreSQL

implementando um UPDATE no SELECT no Postgres


Observe o valor padrão para a coluna qry_count:
CREATE TABLE t (
    a INTEGER PRIMARY KEY, 
    b TEXT, 
    entered_by INTEGER, 
    qry_count INTEGER default 0
);

create function select_and_update(parameter text)
returns setof t as $$
    update t
    set qry_count = qry_count + 1
    from (
        select a
        from t
        where b = $1
        ) s
    where t.a = s.a
    ;
    select *
    from t
    where b = $1
    ;
$$ language sql;

Agora consulte a tabela usando a função acima:
select * from select_and_update('a');

Atualização de acordo com o comentário:

Você pode construí-lo dinamicamente e, em vez de uma função, apenas envolver o código sql, seja ele qual for, em uma transação. Não há necessidade de cursores.
begin;
    update t
    set qry_count = qry_count + 1
    from (
        select a
        from t
        where b = 'a'
        ) s
    where t.a = s.a
    ;
    select *
    from t
    where b = 'a'
    ;
commit;