sql >> Database >  >> RDS >> PostgreSQL

Is het mogelijk om een ​​variabele te gebruiken en geen retourtype op te geven in postgreSQL?

Anoniem codeblok (DO command) kan geen rijen retourneren en Postgres heeft geen globale variabelen. Er zijn maar weinig manieren om zonder te leven. Vier daarvan zijn als volgt.

Gebruik algemene tabeluitdrukking (WITH commando)

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

Gebruik een tijdelijke tabel voor variabelen:

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;

Gebruik een tijdelijke tabel voor resultaten:

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;

Maak een functie aan (voorbeeld):

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. Zijn primaire sleutels passé?

  2. Joomla SQL-injectie-kwetsbaarheid

  3. Versiebeheer SQL Server-database

  4. BadImageFormatException. Dit gebeurt bij het uitvoeren in 64-bits modus met de 32-bits Oracle-clientcomponenten geïnstalleerd