是否可以在 postgreSQL 中使用变量而不指定 return 类型?
Is it possible to use a variable and not specify a return type in 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 *, substring(name,1,3)
FROM Products p
WHERE ColorID = ColorID
END$$;
它要我指定结果集。我不想这样做,因为它在不断变化,因为我只是在探索数据。
ERROR: query has no destination for result data
我尝试了 "return query" 但随后出现此错误:
ERROR: cannot use RETURN QUERY in a non-SETOF function
所以我想 return 多行而不指定结果集应该是什么样子。使用 PostgreSQL 9.4.4
匿名代码块 (DO
command) 不能 return 行并且 Postgres 没有全局变量。
没有它,几乎没有办法生活。其中四个如下。
使用常见的 table 表达式 (WITH
command)
WITH def AS (
SELECT 3 AS colorid
)
SELECT *, substring(name,1,3)
FROM products
JOIN def
USING (colorid);
对变量使用临时 table:
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;
使用临时 table 结果:
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();
考虑这个 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 *, substring(name,1,3)
FROM Products p
WHERE ColorID = ColorID
END$$;
它要我指定结果集。我不想这样做,因为它在不断变化,因为我只是在探索数据。
ERROR: query has no destination for result data
我尝试了 "return query" 但随后出现此错误:
ERROR: cannot use RETURN QUERY in a non-SETOF function
所以我想 return 多行而不指定结果集应该是什么样子。使用 PostgreSQL 9.4.4
匿名代码块 (DO
command) 不能 return 行并且 Postgres 没有全局变量。
没有它,几乎没有办法生活。其中四个如下。
使用常见的 table 表达式 (WITH
command)
WITH def AS (
SELECT 3 AS colorid
)
SELECT *, substring(name,1,3)
FROM products
JOIN def
USING (colorid);
对变量使用临时 table:
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;
使用临时 table 结果:
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();