php 连接oracle 导出百万级数据
1,我们一般做导出的思路就是,根据我们想要的数据,全部查询出来,然后导出来,这个对数据量很大的时候会很慢,这里我提出来的思想就是分页和缓冲实现动态输出。
2.普通的我就不说了,下面我说一下分页和内存刷新思想。代码如下:
$conn = oci_connect('fin_data', 'fin_data', "(DEscriptION=(ADDRESS=(PROTOCOL =TCP)(HOST=192.168.6.65)(PORT = 1521))(CONNECT_DATA =(SID=hqygdw)))");
$sqlName = "select *
from user_tab_columns
where Table_Name='S_SALE_RECEIVABLE_DETAIL'
order by column_name"; $filedName = oci_parse($conn, $sqlName);
oci_execute($filedName, OCI_DEFAULT); // 行数 OCI_DEFAULT表示不要自动commit header('Content-Type: application/vnd.ms-excel;charset=gbk');
header('Content-Disposition: attachment;filename=test_' . time() . '.csv');
header('Cache-Control: max-age=0'); $fp = fopen('php://output', 'a');
$head = array();
$i = 0;
while ($row = oci_fetch_array($filedName, OCI_ASSOC + OCI_RETURN_NULLS)) {
$head[$i] = iconv('utf-8', 'gbk', $row['COLUMN_NAME']);
$i++;
}
fputcsv($fp, $head); $selectCount = "select count(*) as counts from S_SALE_RECEIVABLE_DETAIL t ";
$resultCount = oci_parse($conn, $selectCount); // 配置SQL语句,执行SQL
oci_execute($resultCount, OCI_DEFAULT); // 行数 OCI_DEFAULT表示不要自动commit
$count = oci_fetch_array($resultCount, OCI_ASSOC + OCI_RETURN_NULLS); //$count['COUNTS']=10;
$pageNum = 50000;
$pagePre = ceil($count['COUNTS'] / $pageNum);
for ($i = 1; $i <= $pagePre; $i++) {
$pageStart = ($i - 1) * $pageNum + $pageNum;
$pageEnd = ($i - 1) * $pageNum; $select = "SELECT *
FROM (SELECT A.*, ROWNUM RN
FROM (SELECT * FROM S_SALE_RECEIVABLE_DETAIL) A
WHERE ROWNUM <={$pageStart} )
WHERE RN >= {$pageEnd}"; $result = oci_parse($conn, $select); // 配置SQL语句,执行SQL
oci_execute($result, OCI_DEFAULT); // 行数 OCI_DEFAULT表示不要自动commit
$count =0;
while ($rowResult = oci_fetch_array($result, OCI_ASSOC + OCI_RETURN_NULLS)) {
// print_r(explode(',',$rowResult));exit;
fputcsv($fp,$rowResult);
$count++;
if($count>=$pageNum){
ob_flush();
flush();
}
}
} fputcsv($fp, $head);
php 连接oracle 导出百万级数据的更多相关文章
- 使用POI导出百万级数据到excel的解决方案
1.HSSFWorkbook 和SXSSFWorkbook区别 HSSFWorkbook:是操作Excel2003以前(包括2003)的版本,扩展名是.xls,一张表最大支持65536行数据,256列 ...
- php - 从数据库导出百万级数据(CSV文件)
将数据库连接信息.查询条件.标题信息替换为真实数据即可使用. <?php set_time_limit(0); ini_set('memory_limit', '128M'); $fileNam ...
- java 分页导出百万级数据到excel
最近修改了一个导出员工培训课程的历史记录(一年数据),导出功能本来就有的,不过前台做了时间限制(只能选择一个月时间内的),还有一些必选条件, 导出的数据非常有局限性.心想:为什么要做出这么多条件限制呢 ...
- java 使用POI导出百万级数据
先看结果吧,这只是测试其中有很多因数影响了性能. 表总数为:7千多万,测试导出100万 表字段有17个字段 最终excel大小有60多兆 总耗时:126165毫秒 差不多2分多钟 其核心简单来说就是分 ...
- 问问题_Java一次导出百万条数据生成excel(web操作)
需求:在web页面操作,一次导出百万条数据并生成excel 分析: 1.异步生成Excel,非实时,完成后使用某种方式通知用户 2.生成多个excel文件,并打包成zip文件,因为一个excel容纳不 ...
- MYSQL百万级数据,如何优化
MYSQL百万级数据,如何优化 首先,数据量大的时候,应尽量避免全表扫描,应考虑在 where 及 order by 涉及的列上建立索引,建索引可以大大加快数据的检索速度.但是,有些情况索引是 ...
- oracle count 百万级 分页查询记要总数、总条数优化
oracle count 百万级 分页查询记录总数.总条数优化 oracle count 百万级 查询记录总数.总条数优化 最近做一个项目时,做分页时,发现分页查询速度很慢,分页我做的是两次查询,一次 ...
- python连接oracle导出数据文件
python连接oracle,感觉table_list文件内的表名,来卸载数据文件 主脚本: import os import logging import sys import configpars ...
- EasyPoi大数据导入导出百万级实例
EasyPoi介绍: 利用注解的方式简化了Excel.Word.PDF等格式的导入导出,而且是百万级数据的导入导出.EasyPoi官方网址:EasyPoi教程_V1.0 (mydoc.io).下面我写 ...
随机推荐
- vue--vuex详解
安装vuex npm install vuex --save Vuex 什么是Vuex? 官方说法:Vuex 是一个专为 Vue.js应用程序开发的状态管理模式.它采用集中式存储管理应用的所有组件的 ...
- 初学Vue 遇到Module not found:Error:Can`t resolve 'less-loader' 问题
学习vue时,导入一个子组件时遇到Module not found:Error:Can`t resolve 'less-loader' 问题,实际上时在子组件中的样式里加了这么个代码 <styl ...
- pandas 拆分groupby 应用某个函数apply 和聚合结果aggregate
https://www.jianshu.com/p/2d49cb87626b df.groupby('A').size()
- 笔记:Linux(AWS Redhat)开机启动workman进程(/etc/rc.local必须是755权限)
1.使用which命令查看php的安装路径 [root@ip---- ~]# which php /usr/bin/php 2.使用vim /etc/rc.local将要执行的命令加入/etc/rc. ...
- 2018-2019-1 20189203《Linux内核原理与分析》第二周作业
一.本周学习情况 我本周结合<庖丁解牛>教材学习了蓝墨云的视频课,主要学习内容如下: 1.学习了计算机的工作原理,深入理解了冯诺依曼体系结构. 2.学习了X86-32 CPU的寄存器 3. ...
- 数据库连接池 maxActive,maxIdle,maxWait参数
maxActive 连接池支持的最大连接数,这里取值为20,表示同时最多有20个数据库连接.设 0 为没有限制.maxIdle 连接池中最多可空闲maxIdle个连接 ,这里取值为20,表示即使没有数 ...
- 知识在与温故、总结-再读CLR
序 CLR,通用语言运行时,每个.Net 程序猿,都会第一时间接触到.记得2008年,第一次学习Jeffrey Richter的CLR Via C#,读的懵懵懂懂,大抵因为编码太少,理解的只是概念和皮 ...
- 事件冒泡以及onmouseenter 和 onmouseover 的不同
1. onmouseenter onmouseenter 事件在鼠标指针移动到元素上时触发. 该事件通常与 onmouseleave 事件一同使用, 在鼠标指针移出元素上时触发. onmouseent ...
- 点火开关分为4个档位,分别是off,acc,IG-on,和ST
off全车除了常火(如应急灯,时钟等的记忆功能)外,均不供电.acc 是附件档,部分车载附属设备供电,如视听系统,仪表灯,灯光等.也就是说,车停在哪里,发动机不转,除了空调不能用外,车内的设备基本都可 ...
- SpringBoot使用HttpClient远程调用
一. Get请求 try { //拼接url url = url+"access_token="+token+"&department_id=1&fetc ...