sql >> Databasteknik >  >> RDS >> PostgreSQL

implementerar en UPPDATERING på SELECT i Postgres

Lägg märke till standardvärdet för kolumnen 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;

Fråga nu tabellen med ovanstående funktion:

select * from select_and_update('a');

Uppdatering enligt kommentar:

Du kan bygga den dynamiskt och i stället för en funktion bara linda in SQL-koden, vad den än är, i en transaktion. Inget behov av markörer.

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;


  1. Kan inte se triggers som jag skapade i SQL Server Management Studio 2008

  2. SQL Joins:Framtiden för SQL ANSI Standard (var kontra join)?

  3. Hur man söker efter ett fullständigt namn när förnamn och efternamn lagras i olika kolumner

  4. Du har inte en implicit applikation i omfattning:PlayFramework med Oracle