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

Bản ghi dựa trên con trỏ trong PostgreSQL

1. Con trỏ ngầm

Hầu như luôn tốt hơn nếu sử dụng con trỏ ngầm của FOR vòng lặp hơn là sử dụng một con trỏ rõ ràng hơi chậm và khó sử dụng. Tôi đã viết hàng nghìn hàm plpgsql và chỉ có một số lần con trỏ rõ ràng có ý nghĩa.

CREATE OR REPLACE FUNCTION avoidable_states()
  RETURNS SETOF varchar AS
$func$
DECLARE
    rec record;
BEGIN   
   FOR rec IN
      SELECT *
      FROM   address ad
      JOIN   city    ct USING (city_id)
   LOOP
      IF rec.city LIKE '%hi%' THEN
          RETURN NEXT rec.city;               
      END IF;
   END LOOP;
END
$func$  LANGUAGE plpgsql STABLE;

Ngoài ra:không có gì trong hàm cần sự biến động VOLATILE . Sử dụng STABLE .

2. Phương pháp dựa trên tập hợp

Hầu như luôn tốt hơn nếu sử dụng phương pháp tiếp cận dựa trên tập hợp nếu có thể . Sử dụng RETURN QUERY để trả về như đã đặt từ một truy vấn trực tiếp.

CREATE OR REPLACE FUNCTION avoidable_states()
  RETURNS SETOF varchar AS
$func$
BEGIN   
   RETURN QUERY
   SELECT ct.city
   FROM   address ad
   JOIN   city    ct USING (city_id)
   WHERE  ct.city LIKE '%hi%';
END
$func$  LANGUAGE plpgsql STABLE;

3. Hàm SQL

Đối với trường hợp đơn giản (có thể là đơn giản hóa), bạn cũng có thể sử dụng một hàm SQL đơn giản hoặc thậm chí chỉ truy vấn:

CREATE OR REPLACE FUNCTION avoidable_states()
  RETURNS SETOF varchar AS
$func$
   SELECT ct.city
   FROM   address ad
   JOIN   city    ct USING (city_id)
   WHERE  ct.city LIKE '%hi%';
$func$  LANGUAGE sql STABLE;


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Tắt kiểm tra khóa ngoại PostgreSQL để di chuyển

  2. Kết hợp nhiều câu lệnh SELECT

  3. thực hiện các hoạt động liên quan đến datetime trong PHP

  4. Liên kết tham số mảng với truy vấn gốc

  5. Hội thảo trên web:Ngân hàng trên Postgres - Cân nhắc Ứng dụng Tài chính [Theo dõi]