加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-13 16:29:43 所属栏目:百科 来源:网络整理
导读:考虑这个T-SQL: DECLARE @ColorID INTSET @ColorID = 3SELECT *,left(name,3) FROM Products pWHERE ColorID = @ColorID 这有效但不声明变量: SELECT *,substring(name,1,3) FROM Products pWHERE ColorID = 3 我试过这个: DO $$DECLARE ColorID INT;BEGI
考虑这个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();

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读