【问题标题】:PostgreSQL functions select*PostgreSQL 函数选择*
【发布时间】:2009-04-12 11:11:05
【问题描述】:

如何使用:

select * from <some_table>;

在 Postgres 中的 FUNCTION 中?

【问题讨论】:

  • 你的意思是从函数返回?否则这个问题没有任何意义。然后,您应该指定您尝试了什么以及遇到了什么错误。
  • 您可能想要提供更多信息,您想要实现什么目标、您尝试了什么、失败的原因以及您希望它如何工作。

标签: postgresql stored-procedures


【解决方案1】:
CREATE OR REPLACE FUNCTION  my_function() RETURNS INTEGER AS '
   DECLARE
      your_record your_table%ROWTYPE;
   BEGIN

      FOR your_record IN SELECT * FROM your_table  
      LOOP

      --
      -- You can access fields of your table using .
      --    your_record.your_field
        ...
      END LOOP;


   END;
' LANGUAGE 'plpgsql'
STABLE;

CREATE OR REPLACE FUNCTION  my_function() RETURNS INTEGER AS '
   DECLARE
      your_record your_table%ROWTYPE;
   BEGIN

      SELECT * INTO your_record FROM your_table;

      --
      -- You can access fields of your table using .
      --    your_record.your_field

   END;
' LANGUAGE 'plpgsql'
STABLE;


编辑:

加入返回记录:

CREATE OR REPLACE FUNCTION  my_function() RETURNS SETOF record AS '
   DECLARE
      your_record record;
   BEGIN
      --
      -- You should specify a list of fields instead of *
      --
      FOR your_record IN SELECT * FROM your_table INNER JOIN ...           
         RETURN NEXT your_record;
      END LOOP;
   END;
' LANGUAGE 'plpgsql'
STABLE;

要使用 my_function(),您必须指定字段和数据类型: See details here

【讨论】:

  • 但是如果我想与其他表进行连接?
  • @cmax:同样的事情。加入吧。假设您知道如何编写 SQL 连接 - 您可以在函数中执行相同的操作。也许你需要问更详细的问题。
【解决方案2】:

有一个smipler方法,如果要在函数中使用SQL,在函数中使用SQL语言:

CREATE FUNCTION getallzipcodes() 
RETURNS SETOF zip AS
$BODY$
     SELECT * FROM zip;
$BODY$ 
LANGUAGE 'sql';

这也可能有用(如何调用函数)

SELECT function_returning_setof(); -- Wrong!  
SELECT * FROM function_returning_setof(); -- OK!  
SELECT function_returning_scalar(); -- OK 

reference

【讨论】:

    猜你喜欢
    • 2018-01-05
    • 1970-01-01
    • 2011-10-02
    • 1970-01-01
    • 1970-01-01
    • 2011-04-12
    • 2021-08-23
    • 1970-01-01
    • 2019-01-22
    相关资源
    最近更新 更多