【发布时间】:2018-10-28 15:00:10
【问题描述】:
下面是我的 sql 查询。在这里,我使用 DBMS_RANDOM.VALUE 过滤来自 2 个不同表的 2 组数据。 Oracle SQL 加载时间很长,并抛出以下错误。我尝试搜索相同的错误。但答案并不能解决我的问题。请让我知道是否有任何其他方法可以达到结果。
select * from (select ac.account, ph.phone_no
from account ac, phone ph
and ac.account_status = 'OPEN'
and ac.account_type ='1'
and ac.account_sub_type ='2'
and ac.account = ph.phone_account
order by DBMS_RANDOM.VALUE)
where rownum = '1';
我看到 ORA-01652:无法在表空间 TEMP 中将临时段扩展 128 错误。每次运行查询时,我都需要从帐户和电话表中获取随机帐户和相应的 phone_no。
编辑:从上面的查询中,我需要从帐户表和电话号码表中随机选择一组帐号和电话号码。请注意,帐号来自 account 表,电话号码来自 phone 表。
示例输出只是 1 个帐号和一个电话号码。例如:123456 1234567890
编辑 2:有时它可以工作,但加载一组数据大约需要 40-60 分钟,这对于我的自动化测试用例来说是非常不切实际的。需要更好的选择。
【问题讨论】:
-
编辑您的问题并解释您想要做什么。样本数据和期望的结果会有所帮助。
-
ROWNUM 是一个数字,而不是一个字符串。
-
是我遗漏了什么,还是您只是将表格帐户和电话组合在一起而不加入它们?错误本身只是意味着 oracle 需要比现在可用的更多临时空间,这表明您的查询为数据库创建了相当多的工作。如果可能,请查看查询执行计划并优化查询。该错误不是您的根本问题,它只是昂贵查询的症状。
-
完成;请看一下。谢谢戈登...
-
@DirkTrilsbeek 是正确的。您的查询生成笛卡尔连接(表 A 中的所有行都连接到表 B 中的所有行)。
ACCOUNT和PHONE表有哪些常用列?