Điều này đã được yêu cầu nhiều lần here và here, nhưng không có câu trả lời nào phù hợp trong trường hợp của tôi vì tôi không muốn thực hiện câu lệnh cập nhật của tôi trong một hàm PL/PgSQL và sử dụng GET DIAGNOSTICS integer_var = ROW_COUNT
.Bắt hàng bị ảnh hưởng bởi tuyên bố UPDATE trong RAW plpgsql
Tôi phải làm điều này trong SQL thô.
Ví dụ, trong MS SQL SERVER chúng tôi có @@ ROWCOUNT mà có thể được sử dụng như sau:
UPDATE <target_table>
SET Proprerty0 = Value0
WHERE <predicate>;
SELECT <computed_value_columns>
FROM <target>
WHERE @@ROWCOUNT > 0;
Trong một khứ hồi cơ sở dữ liệu tôi biết nếu bản cập nhật đã thành công và nhận được các giá trị tính toán lại .
Điều gì có thể được sử dụng thay vì '@@ ROWCOUNT'? Ai đó có thể xác nhận rằng điều này thực tế là không thể vào thời điểm này?
Xin cảm ơn trước.
CHỈNH SỬA 1: Tôi xác nhận rằng tôi cần sử dụng SQL thô (tôi đã viết "raw plpgsql" trong mô tả ban đầu).
Trong một nỗ lực để làm cho câu hỏi của tôi rõ ràng hơn xin vui lòng xem xét rằng tuyên bố cập nhật chỉ ảnh hưởng đến một hàng và suy nghĩ về đồng thời lạc quan:
Các khách hàng đã làm một Bản Tuyên Bố
SELECT
lúc đầu.Ông xây dựng CẬP NHẬT và biết cột nào được tính toán cơ sở dữ liệu sẽ được bao gồm trong mệnh đề SELECT. Trong số những thứ khác, vị từ bao gồm dấu thời gian được tính mỗi lần các hàng được cập nhật.
Vì vậy, nếu chúng tôi có 1 hàng trả lại thì mọi thứ đều OK. Nếu không có hàng nào được trả về thì chúng ta biết rằng có một bản cập nhật trước đó và máy khách có thể cần làm mới dữ liệu trước khi cố gắng cập nhật lại khoản. Đây là lý do tại sao chúng ta cần biết có bao nhiêu hàng bị ảnh hưởng bởi câu lệnh cập nhật trước khi trả về các cột được tính toán. Không có hàng nào được trả lại nếu cập nhật không thành công.
Vui lòng luôn đề cập đến phiên bản PostgreSQL của bạn trong các câu hỏi. –
Vì vậy, bạn không ** muốn làm trong PL/pgSQL nhưng trong SQL. Nếu không, bạn * có thể * sử dụng 'GET DIAGNOSTICS' –
@CraigRinger: Xem thẻ tương ứng. –