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

PostgreSQL - Trả lại nội dung hàng khi UPDATE không thành công

Một tùy chọn để tiếp tục sử dụng cập nhật và vẫn trả về các hàng xung đột sẽ là tạo một hàm kiểm tra việc này trước khi bạn thực hiện cập nhật. Trong trường hợp khóa chính đã tồn tại, nó sẽ trả về hàng xung đột và Nếu không, hàng đó sẽ được cập nhật. Ví dụ về một hàm như vậy có thể là:

CREATE OR REPLACE FUNCTION my_func(cont TEXT, lang INT, idp TEXT) 
RETURNS SETOF sentence AS $$
DECLARE j RECORD;
BEGIN
  SELECT * FROM sentence WHERE content = cont AND 
                               language_id = lang INTO j;
  IF j IS NOT NULL THEN 
    RETURN NEXT j;
  ELSE
    RETURN QUERY UPDATE sentence SET content = cont, language_id= lang 
                 WHERE id = idp RETURNING *;
  END IF;
  EXCEPTION WHEN SQLSTATE '23505' THEN 
  RETURN QUERY SELECT * FROM sentence WHERE content = cont AND
                                            language_id= lang;
END$$ LANGUAGE plpgsql;

SELECT my_func('This is a sentence',834,'0538f24a-2046-4da6-933d-409aa7b7c597');

CHỈNH SỬA :Nếu không có xung đột và bạn vẫn muốn RETURNING * , chỉ cần thêm một RETURN QUERY đến UPDATE tuyên bố:

...    
RETURN QUERY 
UPDATE sentence SET content = cont, language_id= lang WHERE id = idp 
RETURNING *;
...



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Postgres:nên tạo chỉ mục trước hoặc sau khi điền bảng

  2. PostgreSQL:Chọn dữ liệu có tương tự trên trường dấu thời gian

  3. Mệnh đề ORDER BY ... USING trong PostgreSQL

  4. Không thể CHỌN từ mệnh đề CẬP NHẬT TRẢ LẠI trong postgres

  5. Lưu các thay đổi vào vaadin cơ sở dữ liệu