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

Czy można używać zmiennej i nie określać typu zwracanego w postgreSQL?

Blok kodu anonimowego (DO polecenie) nie może zwracać wierszy, a Postgres nie ma zmiennych globalnych. Jest kilka sposobów na życie bez tego. Cztery z nich są następujące.

Użyj wspólnego wyrażenia tabelowego (WITH polecenie)

WITH def AS (
    SELECT 3 AS colorid
    )
SELECT *, substring(name,1,3) 
FROM products
JOIN def
USING (colorid);

Użyj tabeli tymczasowej dla zmiennych:

CREATE TEMP TABLE var(colorid int);
INSERT INTO var values (3);
SELECT *, substring(name,1,3) 
FROM products
JOIN var
USING (colorid);
DROP TABLE var;

Użyj tabeli tymczasowej do wyników:

DO $$
DECLARE v_colorid INT;
BEGIN
    v_colorid := 3;
    CREATE TEMP TABLE res AS 
        SELECT *, substring(name,1,3) 
        FROM products
        WHERE colorid = v_colorid;
END $$;
SELECT * 
FROM res;
DROP TABLE res;

Utwórz funkcję (przykład):

CREATE OR REPLACE FUNCTION select_from_products()
RETURNS TABLE (colorid int, name text, abbr text)
LANGUAGE plpgsql as $$
DECLARE v_colorid INT;
BEGIN
    v_colorid := 3;
    RETURN QUERY
        SELECT *, substring(p.name,1,3) 
        FROM products p
        WHERE p.colorid = v_colorid;
END $$;

SELECT * FROM select_from_products();



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Wyświetlanie obrazu w IReports przy użyciu PostgreSql

  2. Jak utworzyć tabelę przestawną w PostgreSQL

  3. Jak utworzyć użytkownika tylko do odczytu w PostgreSQL

  4. Sprawdź, czy baza danych istnieje w PostgreSQL za pomocą powłoki

  5. Przegląd pgModeler dla PostgreSQL