• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • MsSql
  • Mysql
  • oracle
  • MariaDB
  • DB2
  • SQLite
  • PostgreSQL
  • MongoDB
  • Redis
  • Access
  • 数据库其它
  • sybase
  • HBase
您的位置:首页 > 数据库 >PostgreSQL > PostgreSQL存储过程循环调用

PostgreSQL存储过程循环调用

作者:posse_wang的博客 字体:[增加 减小] 来源:互联网 时间:2017-08-07

posse_wang的博客通过本文主要向大家介绍了postgresql,存储过程,函数等相关知识,希望本文的分享对您有所帮助

需求描述

碰到需求,需要往表里插入5万条数据, 打算使用存储过程,但是postgres, 但是postgres没有建存储过程的SQL, 使用函数来实现.

表数据结构完整性要求一次插入两条记录, 两条记录相互外键约束, record1 的 partner_id 字段值是 record2 的主键id的值, record2 的 partner_id 字段值是 record1 的主键id的值.

实现

create
    or replace function creatData() returns boolean as $BODY$

declare ii integer;
declare id1 integer;
declare id2 integer;

begin
    ii = 1;
    id1 = nextval('seq_table');
    id2 = nextval('seq_table');

FOR ii IN 1..50000 LOOP
insert
    into
        dock_appt
    values(
        id1,
        10,
        10250,
        5001,
        '2017-08-07 14:00:00',
        '2017-08-07 15:00:00',
        id2,
        true,
        864,
        16950,
        0,
        0,
        0,
        null,
        20,
        null,
        18050,
        '2017-08-07 13:55:08',
        18051,
        '2017-08-07 13:57:28',
        false,
        401,
        10,
        null,
        null,
        null,
        'DA-HZ001000003',
        '2017-08-07 13:54:08',
        '2017-08-07 13:57:28',
        10251
    );

insert
    into
        dock_appt
    values(
        id2,
        10,
        10251,
        5001,
        '2017-08-07 14:00:00',
        '2017-08-07 15:00:00',
        id1,
        true,
        864,
        16950,
        0,
        0,
        0,
        null,
        20,
        null,
        18050,
        '2017-08-07 13:55:08',
        18051,
        '2017-08-07 13:57:28',
        false,
        401,
        10,
        null,
        null,
        null,
        'DA-HZ001000003',
        '2017-08-07 13:54:08',
        '2017-08-07 13:57:28',
        10250
);
end LOOP;
return true;

end;
$BODY$ LANGUAGE plpgsql;

问题

这样子插入只能插入一次, 因为取得序列值的地方在for循环的外面, id的值不会随着循环再赋值, 主键冲突.

办法

想到可以再对函数进行循环, 于是再写一个函数循环执行上一个函数, 去掉上个函数中的for 循环语句FOR i IN 1..500000 LOOP 和 end LOOP;
再写一个下面函数循环执行函数1

create
    or replace function loopCreate() returns void LANGUAGE plpgsql as $BODY$ begin for i in 1..50000 LOOP PERFORM creatData();
end LOOP;
end;

执行函数

select * from loopCreate() as tab;

好了,完成,10万条数数据秒插, 2.1秒.

PS:CSDN的markdown编辑器真的很难用, 文字稍微长一点就卡, 而且换行经常自动调跳回上一行, 无奈, 现在都是直接在别的地方写好粘贴回来…

分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • CentOS 7下安装PostgreSQL 9.6的教程分享
  • windows PostgreSQL 9.1 安装详细步骤
  • PostgreSQL安装、配置及简单使用方法
  • Mybatis调用PostgreSQL存储过程实现数组入参传递
  • Linux CentOS 7源码编译安装PostgreSQL9.5
  • Linux CentOS 7安装PostgreSQL9.3图文教程
  • PostgreSQL中常用的时间日期脚本使用教程
  • 深入解读PostgreSQL中的序列及其相关函数的用法
  • Postgresql ALTER语句常用操作小结
  • PostgreSQL教程(二十):PL/pgSQL过程语言

相关文章

  • 2017-05-11Linux CentOS 7源码编译安装PostgreSQL9.5
  • 2017-05-11Windows PostgreSQL 安装图文教程
  • 2017-05-11PostgreSQL教程(十二):角色和权限管理介绍
  • 2017-05-11用一整天的时间安装postgreSQL NTFS权限
  • 2017-05-11PostgreSQL教程(五):函数和操作符详解(1)
  • 2017-05-11PostgreSQL教程(十五):系统表详解
  • 2017-05-11PostgreSQL教程(三):表的继承和分区表详解
  • 2017-05-11PostgreSQL 数据库性能提升的几个方面
  • 2017-05-11PostgreSQL中调用存储过程并返回数据集实例
  • 2017-05-11PostgreSQL之分区表(partitioning)

文章分类

  • MsSql
  • Mysql
  • oracle
  • MariaDB
  • DB2
  • SQLite
  • PostgreSQL
  • MongoDB
  • Redis
  • Access
  • 数据库其它
  • sybase
  • HBase

最近更新的内容

    • PostgreSQL中调用存储过程并返回数据集实例
    • SQL Server数据迁移至PostgreSQL出错的解释以及解决方案
    • PostgreSQL教程(四):数据类型详解
    • PostgreSQL的存储过程简单入门
    • Linux CentOS 7安装PostgreSQL9.3图文教程
    • Postgre数据库Insert 、Query性能优化详解
    • Windows下Postgresql数据库的下载与配置方法
    • PostgreSQL教程(二):模式Schema详解
    • 用一整天的时间安装postgreSQL NTFS权限
    • PostgreSql新手必学入门命令小结

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有