如何声明在PostgreSQL 8.3查询中使用的变量?
在MS SQL Server中,我可以这样做:
DECLARE @myvar INT
SET @myvar = 5
SELECT *
FROM somewhere
WHERE something = @myvar
如何在PostgreSQL中执行相同的操作?根据文档,变量被简单地声明为"name type;",但这给了我一个语法错误:
myvar INTEGER;
谁能给我举个正确语法的例子?
发布于 2009-09-29 08:45:26
PostgreSQL中没有这样的功能。您只能在pl/PgSQL (或其他pl/*)中执行此操作,但不能在纯SQL中执行此操作。
一个例外是WITH ()
查询,它可以作为变量,甚至是变量的tuple
。它允许您返回临时值的表。
WITH master_user AS (
SELECT
login,
registration_date
FROM users
WHERE ...
)
SELECT *
FROM users
WHERE master_login = (SELECT login
FROM master_user)
AND (SELECT registration_date
FROM master_user) > ...;
发布于 2013-05-15 04:40:09
我通过使用WITH
clause实现了同样的目标,虽然它不是很优雅,但可以做同样的事情。不过,对于这个例子来说,这实在是言过其实了。我也不特别推荐这样做。
WITH myconstants (var1, var2) as (
values (5, 'foo')
)
SELECT *
FROM somewhere, myconstants
WHERE something = var1
OR something_else = var2;
发布于 2009-10-02 19:22:58
在pl/PgSQL之外使用临时表
除了使用pl/pgsql或建议的其他pl/*语言之外,这是我能想到的唯一其他可能性。
begin;
select 5::int as var into temp table myvar;
select *
from somewhere s, myvar v
where s.something = v.var;
commit;
https://stackoverflow.com/questions/1490942
复制相似问题