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

Er det muligt at bruge en variabel og ikke angive en returtype i postgreSQL?

Anonym kodeblok (DO kommando) kan ikke returnere rækker, og Postgres har ingen globale variabler. Der er få måder at leve uden det. Fire af dem er som følger.

Brug almindeligt tabeludtryk (WITH kommando)

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

Brug en midlertidig tabel til 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;

Brug en midlertidig tabel til resultater:

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;

Opret en funktion (eksempel):

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. Pas på vildledende data fra SET STATISTICS IO

  2. Top 30 mest nyttige Concurrent Manager-forespørgsler

  3. Hvad er formålet med systemtabel master..spt_values, og hvad er betydningen af ​​dets værdier?

  4. Sådan fungerer AUTOINCREMENT i SQLite