Oracle数据库数据恢复、性能优化

找回密码
注册
搜索
热搜: 活动 交友 discuz
发新帖

0

积分

0

好友

1

主题
1#
发表于 2012-12-3 16:05:22 | 查看: 5353| 回复: 5
因常需要大数据量对比、查询等。
常超过1000个数据量查询,出现错误为:
  1. SQL> @/data/oracle/sql/select2.sql
  2. '13920918401',
  3. *
  4. ERROR at line 1002:
  5. ORA-01795: 列表中的最大表达式数为 1000


  6. Elapsed: 00:00:00.15
复制代码
想问问,有没有什么方便好处理这样的问题的?
我之前的方法是把数据分成大约900个数据,分开查。

但是一旦数据量超过5w,10w,那样工作量就特别打?

如果是用or in('1','2','3'……) or in('100001','200001','300001'……)这样,虽然能解决,但是也需要人工区分好1000个以内的。
(这种方法和第一种区分900个账号查询,操作类似)

我想问问是否有更好的办法?

如何查询超过1000个数据的属性等?

或者说,这个限制1000个表达式的参数是否可以调整?调整对DB有什么影响等?
2#
发表于 2012-12-3 16:11:32
  1. oracle@localhost:~$ oerr ora 1795
  2. 01795, 00000, "maximum number of expressions in a list is 1000"
  3. // *Cause:    Number of expressions in the query exceeded than 1000.
  4. //            Note that unused column/expressions are also counted  
  5. //            Maximum number of expressions that are allowed are 1000.
  6. // *Action:   Reduce the number of expressions in the list and resubmit
复制代码
900个数据 他们是否连续为一个范围?

回复 只看该作者 道具 举报

3#
发表于 2012-12-3 16:31:19
Liu Maclean(刘相兵 发表于 2012-12-3 16:11
900个数据 他们是否连续为一个范围?

没有范围,都比较随机的账号。类似QQ,但不是从1000-9999这样有规律,数据两比较大

回复 只看该作者 道具 举报

4#
发表于 2012-12-3 16:32:59
alexycom 发表于 2012-12-3 16:31
没有范围,都比较随机的账号。类似QQ,但不是从1000-9999这样有规律,数据两比较大 ...

2种workaround:

1. 使用PL/SQL LOOP  列表中的值作为 变量带入

2. 使用临时表 将列表值先插入 临时表之后 select * from xx where data in ( select data from temp_table)

回复 只看该作者 道具 举报

5#
发表于 2012-12-3 16:33:53
Liu Maclean(刘相兵 发表于 2012-12-3 16:32
2种workaround:

1. 使用PL/SQL LOOP  列表中的值作为 变量带入

这个1000行能修改吗?

回复 只看该作者 道具 举报

6#
发表于 2012-12-3 16:35:18
alexycom 发表于 2012-12-3 16:33
这个1000行能修改吗?

1000是 IN-LIST的 ITEM总数上限, 不可以修改该上限

回复 只看该作者 道具 举报

您需要登录后才可以回帖 登录 | 注册

QQ|手机版|Archiver|Oracle数据库数据恢复、性能优化

GMT+8, 2024-11-16 02:16 , Processed in 0.048185 second(s), 21 queries .

Powered by Discuz! X2.5

© 2001-2012 Comsenz Inc.

回顶部
TEL/電話+86 13764045638
Email service@parnassusdata.com
QQ 47079569