如何使用PostgreSQL中的函数插入多行

我想在Postgresql中的函数表中插入多行.

这是我的桌子

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).我只是用文字.

要插入多行,您可以将具有相同数量元素的复合类型或两个数组并行排列.展示后者:

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或更高版本……

…引入了一个不同的新变种,可以并行接受多个数组 – 没有上述黑客的怪癖(从不认为CROSS JOIN)

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

> Unnest multiple arrays in parallel

相关文章

项目需要,有个数据需要导入,拿到手一开始以为是mysql,结果...
本文小编为大家详细介绍“怎么查看PostgreSQL数据库中所有表...
错误现象问题原因这是在远程连接时pg_hba.conf文件没有配置正...
因本地资源有限,在公共测试环境搭建了PGsql环境,从数据库本...
wamp 环境 这个提示就是说你的版本低于10了。 先打印ph...
psycopg2.OperationalError: SSL SYSCALL error: EOF detect...