【问题标题】:Postgresql assign a select query to variable in the functionPostgresql 将选择查询分配给函数中的变量
【发布时间】:2013-10-09 08:43:17
【问题描述】:

我正在使用 Postgresql 9.3 并编写了如下函数:

    create or replace function test(building text,floor text) returns void as $$
    Declare
    id integer;
    num integer := 0;
    Begin

    num=num+100

    id :=select to_number(
          (select 
              (select code from buildings where name=building) || floor 
              || (select num::text)),'99999999'
    );

    update table set col1=id;

    End;
    $$
    language plpgsql;

我期望我的id 变量将被分配一个来自select to_number(...) 查询的数字值example: 12502100

但是我得到了以下错误

ERROR:  syntax error at or near ":="
LINE 10: source :=(select code from buildings where name='I3')

如何将查询结果(带有一些字符串操作)赋值给变量id?

Select Into id... 方法我也失败了。

【问题讨论】:

    标签: function postgresql variables


    【解决方案1】:

    您不需要使用SELECT 进行函数评估。

    id := to_number((SELECT code FROM buildings WHERE name = building) 
                                                          || floor || num::text,
                    '999999999');
    

    其他可能性(通常更好)是在表达式列表(结果字段列表)中使用函数

    id := (SELECT to_number(code || floor || num::text, '99999999') 
              FROM buildings WHERE name = building)
    

    仅当您需要查询数据时才使用SELECT,而不是用于函数或变量评估!

    【讨论】:

    • 你的第二种方法给了我错误“")"处或附近的括号不匹配”,第一种方法有效。
    • @Xianlin: 抱歉,固定多了一个括号
    • 如何处理多个变量和一个语句?即您想用 (SELECT field1, field2 FROM building WHERE name = building) 填充 var1 和 var2; var1 应包含 field1 结果,var2 应包含 field2 结果。
    • @thames:您必须对多个变量使用 SELECT INTO 语句
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多