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

PostgreSQL lặp lại các chức năng bên ngoài. Điều đó có thể không?

Bạn không thể DECLARE (toàn cục) biến ( giải pháp thay thế ) cũng không lặp lại với SQL thuần túy - ngoại trừ CTE đệ quy được cung cấp bởi @bma (thực sự đang lặp lại qua hàng, không lặp lại, nói đúng ra).

Tuy nhiên , có DO tuyên bố cho mã thủ tục đặc biệt như vậy. Được giới thiệu với Postgres 9.0. Nó hoạt động giống như một hàm một lần, nhưng không nhận bất kỳ tham số nào và không trả về bất kỳ thứ gì. Bạn có thể RAISE thông báo và cộng sự, vì vậy ví dụ của bạn sẽ hoạt động tốt:

DO
$do$
DECLARE
   _counter int := 0;
BEGIN
   WHILE _counter < 10
   LOOP
      _counter := _counter + 1;
      RAISE NOTICE 'The counter is %', _counter;  -- coerced to text automatically
   END LOOP;
END
$do$

Nếu không được chỉ định khác, ngôn ngữ trong nội dung được mặc định là plpgsql . Bạn có thể sử dụng bất kỳ ngôn ngữ thủ tục đã đăng ký nào mặc dù vậy, nếu bạn khai báo nó (như:LANGUAGE plpython ).

Postgres cũng cung cấp generate_series() để tạo các tập hợp đặc biệt, điều này có thể làm giảm nhu cầu lặp lại trong nhiều trường hợp. Hãy thử tìm kiếm tại đây trên SO để biết các ví dụ.

Ngoài ra, bạn có thể sử dụng WHERE mệnh đề trong CTE sửa đổi dữ liệu trong SQL đơn giản đến các trường hợp rẽ nhánh và mô phỏng IF .. THEN .. ELSE .. END ...



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Kỷ lục gần nhất cho một loạt các ngày

  2. Sử dụng không phù hợp với SearchVector và SearchQuery trong Django

  3. SQL - Cách thoát dấu ngoặc đơn trong PostgreSQL

  4. Làm cách nào để truyền một ngày null trong một nativeQuery ở chế độ ngủ đông?

  5. Tạo lược đồ nếu không tồn tại bằng cách sử dụng Spring Jpa với chế độ ngủ đông