是否可以使用变量而不在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 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(); (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |