【问题标题】:Assign variable in select statement在 select 语句中分配变量
【发布时间】:2014-12-04 23:25:33
【问题描述】:

我在 postgres 中有一个如下所示的表:

id   score
1    23
2    4
3    42
4    21

在普通 SQL 中,我可以声明一个变量并根据 select 语句的结果为其赋值:

declare @this_score int;
select @this_score = score from scores where id = 3;
print @test_int;

这输出 42。是否可以在 postgres 中以这种方式分配变量?

【问题讨论】:

  • @raina77ow 我不认为这是重复的,这个问题不在于分配变量,而是将其用作过滤器。我想实际设置变量。
  • “普通 SQL”似乎是指 Transact-SQL(MS SQL Server、Sybase)或 MySQL(我不确定是哪个)。标准 SQL 本身没有变量的概念,而 PostgreSQL 在函数之外没有脚本功能(或相当有限的 DO 语法)。
  • 想一想,分号在 Transact-SQL 中是不合适的,所以我猜你认为 MySQL 是“正常的”。真的不是。它只是实现某些 SQL 版本的众多 DBMS 系统中的一种,它对事物的处理以非标准和强调易用性而不是健壮性而臭名昭著。

标签: sql postgresql


【解决方案1】:

PostgreSQL 的 SQL 方言没有扩展脚本功能;相反,它希望您使用 PL/PgSQL。在这方面,它更像是 Oracle,而不是 Microsoft 的 T-SQL 或 MySQL。

使用DO 块运行PL/PgSQL,或者如果需要返回值,则创建并运行函数。

例如

DO
$$
DECLARE
    this_score int;
BEGIN
    SELECT score FROM scores WHERE id = 3 INTO this_score;
    RAISE NOTICE 'this_score is: %', this_score;
END;
$$;

【讨论】:

    猜你喜欢
    • 2011-09-09
    • 1970-01-01
    • 2013-05-07
    • 1970-01-01
    • 1970-01-01
    • 2015-02-21
    • 2018-07-31
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多