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

PL / pgSQL cho truy vấn động tất cả trong một

Bạn có thể vui lòng đăng một số định nghĩa bảng và truy vấn mẫu về những gì bạn đang cố gắng thực hiện không? Tôi không chắc chắn 100% những gì bạn đang theo đuổi, nhưng có một vài dạng SQL "động" sử dụng các thủ tục / hàm được lưu trữ:

  1. Tạo một hàm nhận các tham số đầu vào (tức là categoryType, styleId, eventName, areaId) và cắm các giá trị đó vào một yêu cầu SQL "tĩnh". Đây là đoạn mã truy vấn mẫu cho trường hợp của bạn:

Đây là một ví dụ thực tế:

CREATE OR REPLACE FUNCTION SP_IGLGetItem(
    pItemId INTEGER
) 
RETURNS TABLE(
    ItemId INTEGER,
    ItemName VARCHAR(100),
    ItemCategory CHAR(2) 
AS
$$
BEGIN
    RETURN QUERY
    SELECT i.ItemId, i.ItemName, i.ItemCategory
    FROM Item i
    WHERE (i.ItemId = pItemId OR pItemId IS NULL) -- Return single item (if specified, otherwise return all)
    ;
END;
$$
LANGUAGE 'plpgsql';
  1. Xây dựng một chuỗi chứa SQL mà bạn muốn thực thi động dựa trên các điều kiện, giá trị tham số khác nhau, v.v. Điều này càng động càng tốt.

  2. Chạy có điều kiện các câu lệnh SQL "tĩnh" khác nhau dựa trên giá trị của các tham số đầu vào của bạn.

Có điều nào trong số này phù hợp với hoàn cảnh của bạn không?

PL / PGSQL chỉ là ngôn ngữ được sử dụng để viết các thủ tục / hàm được lưu trữ trong Postgres. Nếu bạn thực sự cần tạo SQL động, thì tốt nhất bạn nên viết một hàm bằng PL / PGSQL.

Một tùy chọn khác là tạo động SQL mà bạn muốn trong ứng dụng khách của mình và sau đó chỉ cần gửi trực tiếp SQL đó để được thực thi.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Triển khai các ngày bị chặn cho mô hình ORM sự kiện người dùng

  2. Sự khác biệt giữa kết thúc và hủy bỏ một quy trình

  3. Chuyển đổi Oracle SQL Select thành PostgreSQL select

  4. Tối ưu hóa bảng chỉ đọc PostgreSQL

  5. Làm thế nào để chuyển đổi postgresql 9.4 jsonb thành đối tượng mà không cần hàm / ngôn ngữ phía máy chủ