Bạn rất hiếm khi muốn sử dụng con trỏ một cách rõ ràng trong PostgreSQL, ngay cả khi xử lý kết quả truy vấn trong plpgsql. Đây là một sự tương phản được đánh dấu từ nhiều cơ sở dữ liệu SQL khác, nơi chúng được sử dụng gần như mọi lúc.
Trong plpgsql bạn chỉ có thể viết một cái gì đó như:
DECLARE
emp employee%rowtype;
BEGIN
FOR emp IN SELECT * FROM employee LOOP
IF emp.active THEN
RAISE INFO 'Active: %', emp.employee_id
END IF;
END LOOP;
END
Ở phía trên, các giao dịch plpgsql xử lý ngôn ngữ với mở cửa, ràng buộc, lấy và đóng cửa tự (nhiều hơn về declarations, và control structures).
Với PostgreSQL từ 9.0, bạn có thể chỉ cần thả vào thực thi plpgsql bằng cách sử dụng khối "DO". Đối với các phiên bản trước, bạn cần tạo một hàm và chọn nó. Nếu bạn đang tìm kiếm tương đương PostgreSQL, ví dụ, lặp qua một kết quả với một con trỏ trên SQL Server, đó là những gì nó được. Lưu ý rằng lặp lại vv là không phải là một phần của phương ngữ SQL, chỉ là một phần của plpgsql (hoặc bất kỳ ngôn ngữ emebedded nào khác).
Các "DECLARE CURSOR xxx" cú pháp ở cấp SQL thể được sử dụng như thế này:
DECLARE cur_employees CURSOR FOR SELECT * FROM employee;
FETCH NEXT FROM cur_employees;
// etc..
CLOSE cur_employees;
này có thể được sử dụng để cẩn thận có được chỉ là một phần của tập kết quả truy vấn. Tuy nhiên, nó không bình thường khi sử dụng chúng, vì thường trình điều khiển máy khách của bạn sẽ cung cấp một số chức năng để thực hiện điều này (ví dụ: các bộ kết quả có thể cuộn trong JDBC). Bạn cũng có thể trả lại con trỏ từ các hàm tương tự với Oracle, mặc dù một lần nữa đó là một trường hợp sử dụng tương đối hiếm.
Bắt đầu bằng cách thêm mệnh đề WHERE để chọn mệnh đề đang hoạt động. – aib
Đọc [chương về các con trỏ trong sách hướng dẫn] (http://www.postgresql.org/docs/9.1/interactive/plpgsql-cursors.html). –
tôi đã làm như bạn nói với tôi: DECLARE cur_employees CURSOR CHO SELECT * TỪ nhân viên nơi hoạt động = 'hoạt động' cur_employees CLOSE nhưng tôi đang nhận được lỗi sau: – Karl