Je.
Můžete aktualizovat sloupce typu řádku nebo záznamu v plpgsql - stejně jako vy. Mělo by to samozřejmě fungovat?
Tím by se samozřejmě aktualizovala podkladová tabulka, nikoli proměnná!
UPDATE my_table SET date=now() WHERE id='1';
Pletete si zde dvě věci ...
Odpověď na vysvětlení v komentáři
Nemyslím si, že v PostgreSQL existuje syntaxe, která by mohla UPDATE
celou řadu. Můžete UPDATE
seznam sloupců
, ačkoli. Zvažte toto demo:
Všimněte si, jak používám thedate
místo date
jako název sloupce date
je rezervované slovo
v každém standardu SQL a název typu v PostgreSQL.
CREATE TEMP TABLE my_table (id serial, thedate date);
INSERT INTO my_table(thedate) VALUES (now());
CREATE OR REPLACE FUNCTION test_up()
RETURNS void LANGUAGE plpgsql AS
$func$
DECLARE
_r my_table;
BEGIN
SELECT * INTO _r FROM my_table WHERE id = 1;
_r.thedate := now()::date + 5 ;
UPDATE my_table t
-- explicit list of columns to be to updated
SET (id, thedate) = (_r.id, _r.thedate)
WHERE t.id = 1;
END
$func$;
SELECT test_up();
SELECT * FROM my_table;
Můžete však INSERT
celý řádek
snadno. Jen pro tabulku nezadávejte seznam sloupců (což byste normálně měli, ale v tomto případě je to naprosto v pořádku, ne).
Jako UPDATE
je interně DELETE
následuje INSERT
stejně a funkce automaticky zapouzdří vše v transakci, nechápu, proč byste místo toho nemohli použít toto:
CREATE OR REPLACE FUNCTION x.test_ delins()
RETURNS void LANGUAGE plpgsql AS
$func$
DECLARE
_r my_table;
BEGIN
SELECT * INTO _r
FROM my_table WHERE id = 1;
_r.thedate := now()::date + 10;
DELETE FROM my_table t WHERE t.id = 1;
INSERT INTO my_table SELECT _r.*;
END
$func$;