首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何在PostgreSQL查询中声明变量

如何在PostgreSQL查询中声明变量
EN

Stack Overflow用户
提问于 2009-09-29 14:41:06
回答 9查看 502.1K关注 0票数 343

如何声明在PostgreSQL 8.3查询中使用的变量?

在MS SQL Server中,我可以这样做:

代码语言:javascript
复制
DECLARE @myvar INT
SET @myvar = 5

SELECT *
FROM somewhere
WHERE something = @myvar

如何在PostgreSQL中执行相同的操作?根据文档,变量被简单地声明为"name type;",但这给了我一个语法错误:

代码语言:javascript
复制
myvar INTEGER;

谁能给我举个正确语法的例子?

EN

回答 9

Stack Overflow用户

回答已采纳

发布于 2009-09-29 08:45:26

PostgreSQL中没有这样的功能。您只能在pl/PgSQL (或其他pl/*)中执行此操作,但不能在纯SQL中执行此操作。

一个例外是WITH ()查询,它可以作为变量,甚至是变量的tuple。它允许您返回临时值的表。

代码语言:javascript
复制
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) > ...;
票数 172
EN

Stack Overflow用户

发布于 2013-05-15 04:40:09

我通过使用WITH clause实现了同样的目标,虽然它不是很优雅,但可以做同样的事情。不过,对于这个例子来说,这实在是言过其实了。我也不特别推荐这样做。

代码语言:javascript
复制
WITH myconstants (var1, var2) as (
   values (5, 'foo')
)
SELECT *
FROM somewhere, myconstants
WHERE something = var1
   OR something_else = var2;
票数 305
EN

Stack Overflow用户

发布于 2009-10-02 19:22:58

在pl/PgSQL之外使用临时表

除了使用pl/pgsql或建议的其他pl/*语言之外,这是我能想到的唯一其他可能性。

代码语言:javascript
复制
begin;
select 5::int as var into temp table myvar;
select *
  from somewhere s, myvar v
 where s.something = v.var;
commit;
票数 25
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1490942

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档