PostgreSQL
 sql >> Teknologi Basis Data >  >> RDS >> PostgreSQL

UPDATE seluruh baris di PL/pgSQL

Ini.
Anda dapat memperbarui kolom dari baris atau jenis catatan di plpgsql - seperti yang Anda miliki. Seharusnya berhasil, jelas?

Ini akan memperbarui tabel yang mendasarinya, tentu saja, bukan variabelnya!

UPDATE my_table SET date=now() WHERE id='1';

Anda membingungkan dua hal di sini ...

Jawaban klarifikasi di komentar

Saya tidak berpikir ada sintaks di PostgreSQL yang dapat UPDATE seluruh baris. Anda dapat UPDATE daftar kolom , meskipun. Pertimbangkan demo ini:

Perhatikan bagaimana saya menggunakan thedate bukannya thedate sebagai nama kolom, thedate adalah kata yang dicadangkan di setiap standar SQL dan nama tipe di 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;

Namun, Anda dapat INSERT satu baris penuh dengan mudah. Hanya saja, jangan berikan daftar kolom untuk tabel (yang biasanya Anda harus lakukan, tetapi dalam kasus ini tidak apa-apa, bukan).

Sebagai UPDATE secara internal adalah DELETE diikuti dengan INSERT lagi pula, dan suatu fungsi secara otomatis merangkum semua yang ada dalam suatu transaksi, saya tidak mengerti, mengapa Anda tidak dapat menggunakan ini sebagai gantinya:

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$;


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Bergabunglah di CTE di SQLAlchemy

  2. Skema PostgreSQL / Ruang Nama dengan Django

  3. Alur kerja Symfony2 + Netbeans jarak jauh (feat. git)

  4. PostgreSql :Json Array ke Baris menggunakan Lateral Join

  5. Tidak dapat terhubung ke server:postgresql di ubuntu di subsistem windows untuk linux