gpt4 book ai didi

function - 如何在 PostgreSQL 中使用函数插入多行

转载 作者:行者123 更新时间:2023-11-29 11:26:38 25 4
gpt4 key购买 nike

我想在 PostgreSQL 中使用函数在表中插入多行。

这是我的 table

CREATE TABLE mahasiswa
(
nim CHAR(10),
nama VACHAR(40)
CONSTRAINT pk_nim PRIMARY KEY (nim)
)
;

这是我创建的函数

CREATE FUNCTION insertdata(CHAR(10),varchar(40)) 
RETURNS VOID AS
$$
INSERT INTO mahasiswa VALUES ($1,$2);
$$
LANGUAGE 'sql';

当我这样调用函数时

SELECT insertdata ('1234567890','Nahrun'),
('0987654321','Hartono');

只插入一行。

如何修改我的函数以一次插入多行?

最佳答案

您拥有的功能应该是:

CREATE FUNCTION insertdata(varchar(10),varchar(40)) 
RETURNS VOID AS
$$
INSERT INTO mahasiswa(col_name1, col_name2)
VALUES ($1,$2);
$$
LANGUAGE sql STRICT;
  • 不要引用语言名称。这是一个标识符。

  • 始终提供带有持久语句的目标列表。否则,如果您稍后更改表定义,该函数可能会以意想不到的方式运行。

  • 永远不要使用char(n),除非您知道自己在做什么。我只使用 text

插入多行,您可以取一个复合类型的数组或两个元素相同数量的数组并行取消嵌套。演示后者:

CREATE FUNCTION insertdata(_arr1 text[], _arr2 text[]) 
RETURNS VOID AS
$$
INSERT INTO mahasiswa(col_name1, col_name2)
SELECT unnest(_arr1), unnest(_arr2);
$$
LANGUAGE sql STRICT;

调用:

SELECT insertdata ('{1234567890,0987654321}', '{Nahrun,Hartono}');

我宁愿使用 plpgsql 函数并检查两个数组中的元素数量是否相同,以防止出错。使用 array_length(arr1, 1) ...

Postgres 9.4 或更高版本 ...

...引入了一个新的 unnest 变体,它可以并行接受多个数组 - 没有上述 hack 的怪癖(从不默认为 CROSS JOIN)

   INSERT INTO mahasiswa(col_name1, col_name2)
SELECT * FROM unnest(_arr1, _arr2); -- must be in FROM list

关于function - 如何在 PostgreSQL 中使用函数插入多行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24343933/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com