用shell帮助解决ORA问题

今天碰到一个设计的严重问题,由于使用了外部文件来和sqlplus交互

sql大体结构如下

select xxxxx from xxxxx where table_name in ( "解析外部文件“)

在测试环境中没有什么问题,当某个用户表比较多的时候,就开始报如下的错误

*
ERROR at line 1003:
ORA-01795: maximum number of expressions in a list is 1000
********************************************************************************

因为需要,一定要解析这个外部文件,所以只能从别的方面进行考虑进行解决。

我加了了分页的改进,没500条记录分为一页,这样循环调用就可以生成最终的文件了。

v_page_size=500
v_page=1
v_start=1
v_len=`expr ${v_page} \* ${v_page_size}`
minus_file_len=`cat ${minus_list}|wc -l` 
#pages_flag=`expr ${minus_file_len} / ${v_page_size}`
pages_float=`echo "scale=2 ; ${minus_file_len} / 500"|bc`
pages_num=`echo '' | awk -v a=$pages_float '{print int(a+0.999)}'`

--上面的这一段基本就是要实现oracle中ceil的部分,比如有700条记录,500条一页,这样700/500就是1.4,根据需要,需要返回2.

然后开始循环,控制下标,

while [ ${v_page} -le  ${pages_num} ]
do 
echo ...............................
echo 'from Source :' $S_DB_STR
echo  from:$v_start
echo end:$v_len
echo page no: $v_page
echo ...............................
sed -n "${v_start},${v_len}p" ${minus_list} > $SCHEMA_DIR/table_list.log
minus_tab_list=`cat ${SCHEMA_DIR}/table_list._${v_page}.log|awk '{print "'\''" $1 "'\'',"}'`
get_tab_details  $S_DB_CONN_STR    --这个部分是调用sqlplus的部分,传入连接串
v_start=`expr ${v_page} \* ${v_page_size} + 1`
#v_page=$[ $v_page + 1 ]
v_page=`expr ${v_page} + 1`
v_len=`expr ${v_page} \* ${v_page_size}`
done

输出结果如下:

from:1
end:500
page no: 1
...............................

数据内容

from:501
end:1000
page no: 2
...............................
xxx

这样不管数据量有多大,都可以灵活的进行拆分。

原文发布于微信公众号 - 杨建荣的学习笔记(jianrong-notes)

原文发表时间:2014-03-07

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏JavaEE

spring及springboot整合redis前言:一、整合前提:二、spring整合redis:三、springboot整合redis:总结:

redis是一种nosql数据库,以<key,value>的形式存储数据,其速度相比于MySQL之类的数据库,相当于内存读写与硬盘读写的差别,所以常常用作缓存。...

563
来自专栏技巅

Glusterfs之nfs模块源码分析(中)之Glusterfs实现NFS服务器

1807
来自专栏安恒网络空间安全讲武堂

专题 | Python编写渗透工具学习笔记一

目录&基础知识 0x00 Python编程中一些模块的简单介绍(基础知识) 0x01web目录扫描程序 --脚本代码的实现和分析 --优化脚本 0x02实现一个...

2367
来自专栏linux驱动个人学习

Linux进程ID号--Linux进程的管理与调度(三)【转】

Linux 内核使用 task_struct 数据结构来关联所有与进程有关的数据和结构,Linux 内核所有涉及到进程和程序的所有算法都是围绕该数据结构建立的,...

951
来自专栏杂烩

redis拾遗 原

    自己边学边记录的,写在了excel里,这里直接沾出来,懒得美化加工了。

1022
来自专栏小狼的世界

PHP手册阅读笔记

学习PHP以来一直希望有时间能够有时间通读PHP手册,最近终于强迫自己划出一些时间,完成了对PHP手册的通读。除了函数参考部分没有每个都看,其他的章节基本上都看...

1074
来自专栏IT技术精选文摘

Nginx之如何编写Handler模块

Handler模块简介 基本上作为第三方开发者最可能开发的就是三种类型的模块,即handler,filter和load-balancer。Handler模块就是...

2039
来自专栏技术专栏

慕课网Flask高级编程实战-7.静态文件、模板、消息闪现与Jinja2

Flask访问静态文件非常简单,只需要在项目根目录建立static文件夹。将静态资源文件放入static下即可。访问的时候访问http://ip:port/st...

863
来自专栏闵开慧

hadoop源码解析2 - conf包中Configuration.java解析

1 Hadoop Configuration简介     Hadoop没有使用java.util.Properties管理配置文件,也没有使用Apache Ja...

3238
来自专栏Danny的专栏

【SSH快速进阶】——Struts2数据校验

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/huyuyang6688/article/...

713

扫码关注云+社区