我需要创建一个存储过程,以检查表中是否存在特定帐户(如果存在)
需要在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;
答案 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
)
);
但是我认为,如果您的表具有如此多的列,则说明您做错了事。