微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

是否可以使用变量而不在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();

原文地址:https://www.jb51.cc/postgresql/192761.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐