PostgreSQL
 sql >> Database >  >> RDS >> PostgreSQL

È possibile utilizzare una variabile e non specificare un tipo restituito in postgreSQL?

Blocco di codice anonimo (DO command) non può restituire righe e Postgres non ha variabili globali. Ci sono pochi modi per vivere senza di essa. Quattro di loro sono i seguenti.

Usa un'espressione di tabella comune (WITH comando)

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

Usa una tabella temporanea per le variabili:

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;

Usa una tabella temporanea per i risultati:

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;

Crea una funzione (esempio):

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();