postgresql Postgres游标不接受多个参数

tzxcd3kk  于 2023-11-18  发布在  PostgreSQL
关注(0)|答案(1)|浏览(160)

我创建了一个过程,在过程中我创建了一个参数化的游标,我正在向它传递参数。游标查询有两个参数:一个是过程的参数,另一个是游标的参数。
当我用游标的参数打开游标时,它不接受过程参数的值。当我创建一个没有参数的游标时,它接受过程的参数。
请参阅下面的示例:c2可以正常打开并将数据插入到v_text中,但当我试图打开c9时,它会显示错误

ERROR:  column "p_plan_version_id" does not exist
HINT:  Perhaps you meant to reference the column "pos.plan_version_id"

个字符
如何将多个参数传递给游标?

gorkyyrv

gorkyyrv1#

对于c9,PostgreSQL应该像在DECLARE部分中那样使用p_plan_version_id的值,还是像在OPEN c9部分中那样使用p_plan_version_id的值?为了解决这个歧义,你需要在打开游标时传递两个参数:

DECLARE
   c9 CURSOR (p_product_code varchar, p_pvi numeric) FOR
      SELECT product_code,
             terminal_code,
             quantity
      FROM product_stock pos
      WHERE pos.plan_version_id = p_pvi
        AND pos.product_code    = p_product_code;
BEGIN
   OPEN c9('OIL', p_plan_version_id);
   ...
END;

字符串
下面是一个完整的例子来证明这一点:

CREATE FUNCTION sample(upper_limit bigint) RETURNS SETOF bigint
   LANGUAGE plpgsql AS
$$DECLARE
   c CURSOR (l bigint, u bigint) FOR
      SELECT * FROM generate_series(l, u) AS g(c);
   r record;
BEGIN
   OPEN c(1, upper_limit);
   LOOP
      FETCH c INTO r;
      EXIT WHEN NOT FOUND;

      RETURN NEXT r.c;
   END LOOP;
END;$$;

SELECT * FROM sample(10);

 sample 
════════
      1
      2
      3
      4
      5
      6
      7
      8
      9
     10
(10 rows)

相关问题