使用FOREACH循环的PostgreSQL PL / pgSQL语法错误


نسر الصحراء
2025-03-14 11:56:19 (16天前)
  1. 我正在尝试通过编写一些简单的程序来学习PL / pgSQL。要了解FOREACH循环,我写了以下内容:

CREATE或REPLACE FUNCTION test(int [])RETURNS void AS $$
宣布 …

2 条回复
  1. 0# 我头上有犄角 | 2019-08-31 10-32



    您的函数声明为

    returns void

    所以你不能从中返回任何东西。如果要返回多个值,则需要使用

    returns setof integer



    但它有更多的问题。




    1. 你应该给你的参数一个名字(不是错误,但良好的编码风格)


    2. 从您需要使用的函数返回值

      return

      。返回多个值(因为

      returns setof

      )你需要使用

      return next



    3. 动态SQL不需要返回值,可以直接返回变量。


    4. 也不是错误,但是:

      window

      是一个关键字,我不会使用具有该名称的变量。

    5. </醇>


      应用所有这些,您的函数应如下所示:




      1. CREATE OR REPLACE FUNCTION test(p_input int[])
        RETURNS setof integer
        as

        DECLARE
        l_value INT;
        BEGIN
        FOREACH l_value IN ARRAY p_input
        LOOP
        return next window;
        END LOOP;
        end;

        LANGUAGE plpgsql;

      2. </code>




      我不确定你是否知道,但是已经有一个内置函数可以实现同样的目的:

      unnest()


登录 后才能参与评论