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

Làm thế nào để sử dụng `RETURN NEXT` trong PL / pgSQL một cách chính xác?

Ví dụ đã cho có thể được thay thế hoàn toàn bằng RETURN QUERY :

BEGIN
    RETURN QUERY SELECT y_.y, 'hi' FROM generate_series(1,10,1) AS y_(y)
END;

sẽ là một nhanh hơn.

Nói chung, bạn nên tránh lặp lại bất cứ khi nào có thể, và thay vào đó ưu tiên các hoạt động theo định hướng thiết lập.

Nơi return next qua một vòng lặp là không thể tránh khỏi (điều này rất hiếm và chủ yếu được giới hạn khi bạn cần xử lý ngoại lệ), bạn phải đặt OUT giá trị tham số hoặc tham số bảng, sau đó return next mà không cần đối số.

Trong trường hợp này, vấn đề của bạn là dòng SELECT yr.y, 'hi'; mà không làm gì cả. Bạn đang giả định rằng đích ẩn của một SELECT là các tham số ra, nhưng không phải vậy. Bạn phải sử dụng các tham số out như các biến vòng lặp như @peterm đã làm, sử dụng các phép gán hoặc sử dụng SELECT INTO :

FOR yr IN SELECT * FROM generate_series(1,10,1) AS y_(y) 
LOOP
    RAISE NOTICE 'Computing %', yr.y;
    y := yr.y;
    result := 'hi';
    RETURN NEXT;
END LOOP;
RETURN;


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Phân tích / lập hồ sơ truy vấn trên PostgreSQL

  2. Kết nối đã bị đóng khi đang hoạt động khi tích lũy cơ sở dữ liệu bằng Python

  3. SQLAlchemy không thể kết nối với Postgresql trên localhost

  4. JDBC COPY với kiến

  5. Tìm tên máy chủ và cổng bằng lệnh PSQL