PostgreSQL
 sql >> Baza danych >  >> RDS >> PostgreSQL

PL/pgSQL dla dynamicznych zapytań typu „wszystko w jednym”

Czy możesz opublikować kilka definicji tabel i przykładowe zapytanie dotyczące tego, co próbujesz zrobić? Nie jestem w 100% pewien, czego szukasz, ale istnieje kilka form „dynamicznego” SQL przy użyciu procedur/funkcji składowanych:

  1. Utwórz funkcję, która pobiera parametry wejściowe (tj. categoryType, styleId, eventName, areaId) i wstawia te wartości do „statycznego” żądania SQL. Oto przykładowy fragment zapytania dla Twojej sprawy:

Oto prawdziwy przykład:

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. Zbuduj ciąg znaków zawierający kod SQL, który chcesz wykonać dynamicznie w oparciu o różne warunki, wartości parametrów itp. Jest to tak dynamiczne, jak to tylko możliwe.

  2. Warunkowo uruchamiaj różne „statyczne” instrukcje SQL na podstawie wartości parametrów wejściowych.

Czy któreś z nich pasuje do Twojej sytuacji?

PL/PGSQL to tylko język używany do pisania procedur/funkcji składowanych w Postgresie. Jeśli naprawdę potrzebujesz dynamicznego generowania SQL, najlepiej jest napisać funkcję używając PL/PGSQL.

Inną opcją jest dynamiczne generowanie kodu SQL, który chcesz w aplikacji klienckiej, a następnie przesłanie tego kodu SQL bezpośrednio do wykonania.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Railsy + błędy PostGIS przy migracji bazy danych

  2. Zwracany typ funkcji SQL:rekordy TABLE vs SETOF

  3. Czy można zdefiniować zmienne globalne w postgresql

  4. Jak mogę przekonwertować wszystkie kolumny w mojej bazie danych na niewrażliwe na wielkość liter?

  5. Dodaj miesiące do daty w PostgreSQL