PostgreSQL
 sql >> Datenbank >  >> RDS >> PostgreSQL

Ist es möglich, eine Variable zu verwenden und keinen Rückgabetyp in PostgreSQL anzugeben?

Anonymer Codeblock (DO Befehl) kann keine Zeilen zurückgeben und Postgres hat keine globalen Variablen. Es gibt nur wenige Möglichkeiten, ohne ihn zu leben. Vier davon sind wie folgt.

Gemeinsamen Tabellenausdruck verwenden (WITH Befehl)

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

Verwenden Sie eine temporäre Tabelle für Variablen:

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;

Verwenden Sie eine temporäre Tabelle für Ergebnisse:

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;

Erstellen Sie eine Funktion (Beispiel):

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