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

Nhận kết quả từ truy vấn trong DO satement

Bạn không thể trả về giá trị từ một DO bản tường trình. Thay vào đó, hãy tạo một hàm plpgsql.

Có một số cách để xác định kiểu trả về với RETURNING mệnh đề hoặc với OUT thông số. Đọc hướng dẫn về CREATE FUNCTION .

Có một số cách để trả về giá trị từ hàm. Đọc chương Trả về từ một hàm trong sách hướng dẫn.

Đặc biệt, vì bạn đang cố gắng trả về toàn bộ các hàng từ một bảng, bạn có thể sử dụng kiểu đã đăng ký của bảng cho khai báo hàm:

CREATE FUNCTION foo ()
  RETURNING SETOF test_log 
$func$
BEGIN

IF 'a' = 'a' THEN
  RETURN QUERY
  SELECT * FROM test_log LIMIT 10;
ELSE
   RAISE WARNING $$Didn't work!$$;
END IF;

END
$func$ LANGUAGE plpgsql;

Gọi:

SELECT * FROM foo ();

Hoặc thử tìm kiếm tại đây trên SO. Tôi đã đăng nhiều ví dụ mã liên quan .

Giải pháp cho DO tuyên bố

Nếu bạn không thể sử dụng một hàm, cách giải quyết hợp lý duy nhất với câu lệnh DO là sử dụng bảng tạm thời:

CREATE TEMP TABLE tbl_tmp AS
SELECT * FROM test_log LIMIT 0;

$do$
BEGIN

IF 'a' = 'a' THEN
  INSERT INTO tbl_tmp
  SELECT * FROM test_log LIMIT 10;
ELSE
   RAISE WARNING $$Didn't work!$$;
END IF;

END
$do$ LANGUAGE plpgsql;

SELECT * FROM tbl_tmp;

Bảng tạm thời tự động bị xóa vào cuối phiên .



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Nhận thời gian với múi giờ từ thời gian không có múi giờ và tên múi giờ

  2. Nhiều vấn đề với Jpa Manyto với Spring Boot

  3. Các kiểu tùy chỉnh JPA (EclipseLink) có khả thi không?

  4. Thay đổi kiểu dữ liệu thành float và làm tròn thành 2 chữ số thập phân

  5. Sự khác biệt giữa sao chép luồng và sao chép hợp lý