sql >> Databasteknik >  >> RDS >> PostgreSQL

Är det möjligt att använda en variabel och inte ange en returtyp i postgreSQL?

Anonymt kodblock (DO kommando) kan inte returnera rader och Postgres har inga globala variabler. Det finns få sätt att leva utan det. Fyra av dem är följande.

Använd vanligt tabelluttryck (WITH kommando)

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

Använd en temporär tabell för variabler:

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;

Använd en tillfällig tabell för resultat:

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;

Skapa en funktion (exempel):

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. ExecuteNonQuery:Anslutningsegenskapen har inte initierats.

  2. MySql Single Table, Välj de senaste 7 dagarna och inkludera tomma rader

  3. Pandas skriver dataram till annat postgresql-schema

  4. Varför är logiska läsningar för aggregerade fönsterfunktioner så höga?