PostgreSQL
 sql >> база данни >  >> RDS >> PostgreSQL

Възможно ли е да се използва променлива и да не се посочи тип на връщане в postgreSQL?

Блок с анонимен код (DO команда) не може да връща редове и Postgres няма глобални променливи. Има няколко начина да живеем без него. Четири от тях са както следва.

Използвайте общ израз на таблица (WITH команда)

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

Използвайте временна таблица за променливи:

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;

Използвайте временна таблица за резултати:

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;

Създайте функция (пример):

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. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Postgres - как да върна редове с 0 броя за липсващи данни?

  2. Връщане на редове, съответстващи на елементи от входния масив във функцията plpgsql

  3. Как променяте кодирането на знаци на база данни на Postgres?

  4. Несъответствие на версията на Postgresql 9.2 pg_dump

  5. 2 начина за добавяне на водещи нули в PostgreSQL