【问题标题】:PostgreSQL function, need to get variables inside the functionPostgreSQL函数,需要获取函数内部的变量
【发布时间】:2013-08-14 14:09:56
【问题描述】:

我需要一些关于在 postgreSQL 中定义函数的帮助:

这是我的表定义:

CREATE TABLE venue (
   id INTEGER DEFAULT NEXTVAL('venue_id_seq')
 , building_code building_code
 , floorNo int
 , roomNo int
 , width int
 , length int
);

我需要创建一个与该表相关的函数,该函数为我提供楼层面积。这是我目前所拥有的:

CREATE FUNCTION floorArea(id int) RETURNS int AS '
SELECT  venue.width * venue.length AS result ;
' LANGUAGE SQL;

我不知道如何制作变量等。
我想要一些类似的东西:

var width=  Select width from venue where id=$1;
var length=  Select length from venue where id=$1;
return width * length;

【问题讨论】:

    标签: function postgresql variables plpgsql


    【解决方案1】:

    SQL 函数中没有变量。为此,您需要使用 PL/pgSQLanother procedural language

    使用 plpgsql,它可能看起来像这样:

    CREATE FUNCTION floor_area(_id int)
      RETURNS int AS
    $func$
    DECLARE
       _width   int;
       _length  int;
    BEGIN
    
    SELECT INTO _width, _length
                 width,  length
    FROM   venue
    WHERE  id = _id;
    
    RETURN width * length;
    
    END
    $func$ LANGUAGE plpgsql;
    

    考虑一下我写的关于 parameter names in my other answer 的内容。

    但是像这样的简单任务应该用没有像@Roman already supplied这样的变量的普通SQL来解决。

    【讨论】:

      【解决方案2】:

      我认为你可以做类似的事情

      CREATE FUNCTION floorArea(idp int)
      RETURNS int
      as
      $$
          select width * length from venue as v where v.id = idp
      $$ LANGUAGE SQL;
      

      sql fiddle demo

      【讨论】:

      • 我习惯在参数名称前加上_,例如_id,以避免完全冲突。它还有助于快速识别代码中的参数名称。此外,我还建议不要使用未引用的 CamelCase 标识符,例如 floorArea。它很容易导致混乱。这里有几个令人绝望的问题,源于此。
      • 我在工作中使用 SQL Server,PostgreSQL 只是为了好玩(尽管我想使用 PostgreSQL),所以我们总是在参数之前有 @。无论如何,谢谢提示
      猜你喜欢
      • 2018-02-13
      • 1970-01-01
      • 1970-01-01
      • 2021-03-25
      • 1970-01-01
      • 2023-02-10
      • 1970-01-01
      • 1970-01-01
      • 2017-02-02
      相关资源
      最近更新 更多