如何在PostgreSQL中使用函数插入多行 [英] How to insert multiple rows using a function in PostgreSQL

查看:267
本文介绍了如何在PostgreSQL中使用函数插入多行的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述



这是我的表格



我在表格中插入多于一行的函数

  CREATE TABLE mahasiswa 

nim CHAR(10),
nama VACHAR(40)
CONSTRAINT pk_nim PRIMARY KEY(nim)

;

这是我创建的函数

<$ $($ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $' ;
$$
LANGUAGE'sql';

当我调用这个函数时

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

只插入一行。

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

解决方案

($)
$ b $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $'$ $ $' AS
$$
插入到mahasiswa(col_name1,col_name2)
VALUES($ 1,$ 2);
$$
LANGUAGE sql STRICT;




  • 不要引用语言名称。这是一个标识符。

  • 总是提供一个包含持久语句的目标列表。否则,如果稍后更改表定义,该函数可能会以意想不到的方式运行。 从不使用 char(n) code>,除非你知道你在做什么。我只是使用 text




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

pre $ $ codeREATE 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 $ b $ pre $ INSERT INTO mahasiswa(col_name1,col_name2)
SELECT * FROM unnest(_arr1,_arr2); - 必须在FROM列表中



查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆