今天碰到一个设计的严重问题,由于使用了外部文件来和sqlplus交互
select xxxxx from xxxxx where table_name in ( "解析外部文件“)
在测试环境中没有什么问题,当某个用户表比较多的时候,就开始报如下的错误
ORA-01795: maximum number of expressions in a list is 1000
********************************************************************************
因为需要,一定要解析这个外部文件,所以只能从别的方面进行考虑进行解决。
我加了了分页的改进,没500条记录分为一页,这样循环调用就可以生成最终的文件了。
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} ]
echo ...............................
echo 'from Source :' $S_DB_STR
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=`expr ${v_page} + 1`
v_len=`expr ${v_page} \* ${v_page_size}`
...............................
...............................
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/23718752/viewspace-772851/,如需转载,请注明出处,否则将追究法律责任。