以下是我的表结构
CREATE TABLE gtab86
(
mlid integer DEFAULT nextval('seq_gtab86_id'::regclass),
acyrid integer,
lmonth integer,
islocked boolean
)
在此表中,lmonth
是月份,acyrid
是表示示例值1的年份。
我写了以下Function
以插入gtab86
。
CREATE OR REPLACE FUNCTION createmonthlock(iacyrid integer)
RETURNS void AS '
BEGIN
INSERT INTO gtab86(acyrid, lmonth) VALUES (iacyrid,1);
INSERT INTO gtab86(acyrid, lmonth) VALUES (iacyrid,2);
INSERT INTO gtab86(acyrid, lmonth) VALUES (iacyrid,3);
INSERT INTO gtab86(acyrid, lmonth) VALUES (iacyrid,4);
INSERT INTO gtab86(acyrid, lmonth) VALUES (iacyrid,5);
INSERT INTO gtab86(acyrid, lmonth) VALUES (iacyrid,6);
INSERT INTO gtab86(acyrid, lmonth)VALUES (iacyrid,7);
INSERT INTO gtab86(acyrid, lmonth)VALUES (iacyrid,8);
INSERT INTO gtab86(acyrid, lmonth)VALUES (iacyrid,9);
INSERT INTO gtab86(acyrid, lmonth)VALUES (iacyrid,10);
INSERT INTO gtab86(acyrid, lmonth)VALUES (iacyrid,11);
INSERT INTO gtab86(acyrid, lmonth)VALUES (iacyrid,12);
END;'
LANGUAGE plpgsql VOLATILE COST 100;
如您所见,插入重复12次(对于12 lmonth
个字段行)
如何只进行一次插入查询?
是否可以在函数中使用for 0 to 12
种类的东西?
答案 0 :(得分:3)
您可以根据insert .. select
使用generate_series()
。
你也不需要PL / pgSQL,一个普通的SQL函数可以:
create or replace function createmonthlock(iacyrid integer)
returns void
as
$body$
INSERT INTO gtab86(acyrid, lmonth)
select iacyrid, num
from generate_series(1,12) num;
$body$
language sql;
答案 1 :(得分:0)
您可以使用单个INSERT
语句插入多行:
INSERT INTO gtab86(acyrid, lmonth) VALUES (iacyrid,1), (iacyrid,2), (iacyrid,3), (iacyrid,4), (iacyrid,5), (iacyrid,6), (iacyrid,7), (iacyrid,8), (iacyrid,9), (iacyrid,10), (iacyrid,11), (iacyrid,12);