PostgreSQL
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> PostgreSQL

CẬP NHẬT toàn bộ hàng trong PL / pgSQL

Đó là.
Bạn có thể cập nhật các cột của một hàng hoặc loại bản ghi trong plpgsql - giống như bạn có nó. Rõ ràng là nó sẽ hoạt động?

Tất nhiên, điều này sẽ cập nhật bảng bên dưới, không phải là biến!

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

Bạn đang nhầm lẫn hai điều ở đây ...

Trả lời để làm rõ trong bình luận

Tôi không nghĩ rằng có cú pháp trong PostgreSQL có thể UPDATE cả một hàng. Bạn có thể UPDATE danh sách cột , Tuy nhiên. Hãy xem xét bản trình diễn này:

Lưu ý cách tôi sử dụng thedate thay vì date dưới dạng tên cột, date là một từ dành riêng trong mọi tiêu chuẩn SQL và tên kiểu trong 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;

Tuy nhiên, bạn có thể INSERT cả một hàng một cách dễ dàng. Chỉ cần không cung cấp danh sách cột cho bảng (điều mà bạn thường nên làm, nhưng trong trường hợp này thì hoàn toàn ổn, không phải vậy).

Dưới dạng UPDATE nội bộ là một DELETE theo sau là INSERT Dù sao, và một hàm tự động đóng gói mọi thứ trong một giao dịch, tôi không hiểu, tại sao bạn không thể sử dụng hàm này để thay thế:

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. vô hiệu hóa LƯU Ý trong đầu ra psql

  2. Tìm kết hợp các giá trị cụ thể

  3. Sao chép Postgres

  4. CHỌN phân biệt chữ hoa chữ thường PostgreSQL trên mảng

  5. Thực hiện nâng cấp alembic trong nhiều lược đồ