是否可以使用变量而不在postgreSQL中指定返回类型?

考虑这个T-sql
DECLARE @ColorID INT
SET @ColorID = 3

SELECT *,left(name,3) 
FROM Products p
WHERE ColorID = @ColorID

这有效但不声明变量:

SELECT *,substring(name,1,3) 
FROM Products p
WHERE ColorID = 3

我试过这个:

DO $$
DECLARE ColorID INT;
BEGIN
    ColorID := 3;

    SELECT *,3) 
    FROM Products p
    WHERE ColorID = ColorID 
END$$;

它要我指定结果集.我不想这样做,因为它不断改变,因为我只是在探索数据.

ERROR:  query has no destination for result data

我试过“返回查询”,但后来得到这个错误

ERROR:  cannot use RETURN QUERY in a non-SetoF function

所以我想返回多行而不指定结果集应该是什么样子.使用Postgresql 9.4.4

匿名代码块( DO command)无法返回行,Postgres没有全局变量.
没有它,没有什么方法可以生存.其中四个如下.

使用公用表表达式(WITH command)

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

对变量使用临时表:

CREATE TEMP TABLE var(colorid int);
INSERT INTO var values (3);
SELECT *,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 *,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,3) 
        FROM products p
        WHERE p.colorid = v_colorid;
END $$;

SELECT * FROM select_from_products();

相关文章

项目需要,有个数据需要导入,拿到手一开始以为是mysql,结果...
本文小编为大家详细介绍“怎么查看PostgreSQL数据库中所有表...
错误现象问题原因这是在远程连接时pg_hba.conf文件没有配置正...
因本地资源有限,在公共测试环境搭建了PGsql环境,从数据库本...
wamp 环境 这个提示就是说你的版本低于10了。 先打印ph...
psycopg2.OperationalError: SSL SYSCALL error: EOF detect...