Trong Oracle PL/SQL, biến hệ thống để lưu trữ các số xóa/chèn/hàng được cập nhật là:
Sau một tuyên bố DELETE/INSERT/UPDATE, và trước khi cam kết, bạn có thể lưu trữ SQL% ROWCOUNT trong một biến kiểu số. Hãy nhớ rằng COMMIT hoặc ROLLBACK được đặt lại thành ZERO giá trị của SQL% ROWCOUNT, vì vậy bạn phải sao chép giá trị SQL% ROWCOUNT trong một biến BEFORE COMMIT hoặc ROLLBACK.
On 4/7/07, Karthikeyan Sundaram đã viết:
Hi,
I am using 8.1.0 postgres and trying to write a plpgsql block. In that I am inserting a row. I want to check to see if the row has been
được chèn hay không.
Trong oracle chúng ta có thể nói như thế này
begin
insert into table_a values (1);
if sql%rowcount > 0
then
dbms.output.put_line('rows inserted');
else
dbms.output.put_line('rows not inserted');
end if; end;
Có một cái gì đó tương đương với sql% rowcount trong postgres? Hãy giúp tôi.
Trân skarthi
Có thể:
http://www.postgresql.org/docs/8.2/static/plpgsql-statements.html#PLPGSQL-STATEMENTS-SQL-ONEROW
Nhấp vào liên kết trên, bạn sẽ thấy nội dung này:
37.6.6. Lấy trạng thái kết quả Có một số cách để xác định hiệu ứng của một lệnh. Phương pháp đầu tiên là sử dụng lệnh GET DIAGNOSTICS, có dạng:
GET DIAGNOSTICS variable = item [, ...]; Lệnh này cho phép truy xuất chỉ báo trạng thái hệ thống. Mỗi mục là một từ khóa xác định giá trị trạng thái được gán cho biến được chỉ định (phải là loại dữ liệu phù hợp để nhận).Hiện tại, các mục trạng thái khả dụng là ROW_COUNT, số hàng được xử lý bởi lệnh SQL cuối cùng được gửi xuống công cụ SQL và RESULT_OID, OID của hàng cuối cùng được chèn bởi lệnh SQL gần đây nhất. Lưu ý rằng RESULT_OID chỉ hữu ích sau khi lệnh INSERT vào một bảng chứa OID.
Ví dụ:
NHẬN DIAGNOSTICS integer_var = ROW_COUNT; Phương pháp thứ hai để xác định tác động của lệnh là kiểm tra biến đặc biệt có tên FOUND, thuộc loại boolean. FOUND bắt đầu sai trong vòng mỗi lệnh gọi hàm PL/pgSQL. Nó được thiết lập theo từng loại sau đây: các câu lệnh:
Một câu lệnh INTO được đặt đúng nếu hàng được gán, false nếu không có hàng nào được trả về.
Một tuyên bố PERFORM đặt FOUND true nếu nó tạo (và loại bỏ) một hàng , sai nếu không có hàng nào được tạo.
báo cáo UPDATE, INSERT và DELETE được đặt thành ÂM THANH nếu ít nhất một hàng bị ảnh hưởng, sai nếu không có hàng nào bị ảnh hưởng.
Một câu lệnh FETCH FOUND true nếu nó trả về một hàng, false nếu không có hàng được trả về.
Câu lệnh FOR thiết lập đúng nếu nó lặp lại một hoặc nhiều lần, khác sai. Điều này áp dụng cho cả ba biến thể của câu lệnh FOR (số nguyên FOR vòng lặp, vòng lặp ghi cho vòng lặp FOR và bản ghi động FOR vòng lặp). FOUND được thiết lập theo cách này khi vòng lặp FOR thoát; bên trong việc thực thi vòng lặp , FOUND không được sửa đổi bởi câu lệnh FOR, mặc dù nó có thể thay đổi bằng cách thực hiện các câu lệnh khác trong phạm vi thân vòng lặp.
FOUND là biến cục bộ trong mỗi hàm PL/pgSQL; mọi thay đổi chỉ ảnh hưởng đến chức năng hiện tại.
Vâng, ROW_COUNT là những gì bạn cần. –
tuyệt vời, cảm ơn bạn! –
Trích dẫn sách hướng dẫn không hữu ích. Liên kết là tốt. Nhưng tôi đến stackoverflow cho các ví dụ. – Neil