使用数组作为参数的函数中传递100个以上的参数

时间:2019-09-25 18:27:32

标签: sql postgresql stored-procedures

我需要创建一个存储过程,以检查表中是否存在特定帐户(如果存在)

需要在PostgreSQL中创建自定义函数来更新/插入表。 我需要传递200个无法实现的值。 一些建议使用Array作为参数。但是它不能正确地为我工作。所有200个字段都与int,varchar,double,float等组合在一起。同样,我们无法更改顺序。

请告诉我如何将它们作为参数传递并在update / insert语句中使用它们。

我的代码看起来像这样

create or replace function test(variadic text[])
....
Begin
Insert into customers (custno , company, firstname) values ($1[1],$1[2],$1[3]);
....
END;

1 个答案:

答案 0 :(得分:0)

最好的方法是将复合类型作为参数传递。

您可以使用与表格类似的名称,并使用CREATE TABLE自动创建。

这是一个包含300列的工作示例:

CREATE TABLE wide (
   i0 integer,
   t0 text,
   d0 date,
   i1 integer,
   t1 text,
   d1 date,
   i2 integer,
   t2 text,
   d2 date,
   i3 integer,
   t3 text,
   d3 date,
[... many missing columns]
   i99 integer,
   t99 text,
   d99 date
);

CREATE OR REPLACE PROCEDURE insert_wide(arg wide)
   LANGUAGE plpgsql AS
$$BEGIN
   INSERT INTO wide SELECT (arg).*;
END;$$;

CALL insert_wide(
        ROW(
           0,
           'atext',
           current_date + 0,
           1,
           'atext',
           current_date + 1,
           2,
           'atext',
           current_date + 2,
           3,
           'atext',
           current_date + 3,
[again, many missing columns]
           99,
           'atext',
           current_date + 99
        )
     );

但是我认为,如果您的表具有如此多的列,则说明您做错了事。