PostgreSQL
 sql >> Base de données >  >> RDS >> PostgreSQL

Est-il possible d'utiliser une variable et de ne pas spécifier de type de retour dans postgreSQL ?

Bloc de code anonyme (DO command) ne peut pas renvoyer de lignes et Postgres n'a pas de variables globales. Il existe peu de façons de s'en passer. Quatre d'entre eux sont les suivants.

Utiliser une expression de table commune (WITH commande)

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

Utilisez une table temporaire pour les variables :

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;

Utilisez une table temporaire pour les résultats :

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;

Créer une fonction (exemple) :

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