Blok anonymního kódu (DO
příkaz) nemůže vrátit řádky a Postgres nemá žádné globální proměnné. Existuje jen málo způsobů, jak bez něj žít. Čtyři z nich jsou následující.
Použijte společný tabulkový výraz (WITH
příkaz)
WITH def AS (
SELECT 3 AS colorid
)
SELECT *, substring(name,1,3)
FROM products
JOIN def
USING (colorid);
Použijte dočasnou tabulku pro proměnné:
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;
Pro výsledky použijte dočasnou tabulku:
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;
Vytvořte funkci (příklad):
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();