function - PostgreSQL 函数内的 FOR 循环条件

标签 function postgresql plpgsql sql-insert generate-series

下面是我的表结构

CREATE TABLE gtab86
(
  mlid integer DEFAULT nextval('seq_gtab86_id'::regclass),
  acyrid integer,
  lmonth integer,
  islocked boolean
)
  • 在这个表中,lmonth 是月份,acyrid 是年份,表示示例 1 的值。

  • 我编写了以下函数以插入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;

如您所见,insert into 重复了 12 次(对于 12 个 lmonth 字段行)。
如何让它只有一个插入查询?
是否可以在 函数 中使用 for 0 to 12 kind things?

最佳答案

您可以使用基于generate_series()insert ..select

为此你也不需要 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;

关于function - PostgreSQL 函数内的 FOR 循环条件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24509623/

相关文章:

python - Python如何在另一个函数中调用一个带参数的函数?

php - 如何将自定义类型数组传递给 Postgres 函数

sql - 使用 for 循环插入到表中

c++ - 使用 arrayfire 的未声明标识符

JavaScript 可重用函数

ruby-on-rails - ruby 1.9.2 不支持 pg gem?不能 heroku rake db :migrate (

postgresql - 如何在 PostgreSQL 中更改一周的第一天

sql - 避免检查每一行,按功能替换查询?

swift - 全局存储 SwiftUI 函数

java - 检查密码是否与特定用户匹配 - PostgreSQL 和 Java