我想在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
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。