我的查询只是运行,没有执行,出了什么问题。工作在oracle sql developer,公司服务器上
CREATE TABLE voice2020 AS
SELECT
to_char(SDATE , 'YYYYMM') as month,
MSISDN,
SUM(CH_MONEY_SUBS_DED)/100 AS AIRTIME_VOICE,
SUM(CALLDURATION/60) AS MIN_USAGE,
sum(DUR_ONNET_OOB/60) as DUR_ONNET_OOB,
sum(DUR_ONNET_IB/60) as DUR_ONNET_IB,
sum(DUR_ONNET_FREE/60) as DUR_ONNET_FREE,
sum(DUR_OFFNET_OOB/60) as DUR_OFFNET_OOB,
sum(DUR_OFFNET_IB/60) as DUR_OFFNET_IB,
sum(DUR_OFFNET_FREE/60) as DUR_OFFNET_FREE,
SUM(case when sdate < to_date('20190301','YYYYMMDD')
then CH_MONEY_PAID_DED-nvl(CH_MONEY_SUBS_DED,0)-REV_VOICE_INT-REV_VOICE_ROAM_OUTGOING-REV_VOICE_ROAM_Incoming
else (CH_MONEY_OOB-REV_VOICE_INT-REV_VOICE_ROAM_OUTGOING-REV_VOICE_ROAM_Incoming) end)/100 AS VOICE_OOB_SPEND
FROM CCN.CCN_VOICE_MSISDN_MM@xdr1
where MSISDN IN ( SELECT MSISDN FROM saayma_a.BASE30112020) --change date
GROUP BY
MSISDN,
to_char(SDATE , 'YYYYMM')
;发布于 2020-12-05 11:56:58
这是一个性能问题。显然,驱动CREATE语句的查询要花费太长时间才能返回结果集。
您正在从远程数据库(CCN.CCN_VOICE_MSISDN_MM@xdr1)中的表进行查询,然后对本地表(saayma_a.BASE30112020)进行筛选。这意味着您将通过网络复制远程表的所有,然后丢弃与WHERE子句不匹配的记录。
你知道你的数据(或者至少你应该知道):这听起来有效吗?如果实际上要丢弃大部分记录,则应该尝试筛选远程数据库中的CCN_VOICE_MSIDN_MM。
如果你需要更多的建议,你需要提供更多的信息。请阅读this post about asking Oracle tuning questions on this site,然后编辑您的问题以包含一些细节。
发布于 2020-12-05 06:46:47
您正在执行CTAS (CREATE TABLE AS SELECT),此查询的目的是使用通过此查询生成的数据创建表。
如果只想执行查询并查看数据,则删除查询的第一行。
-- CREATE TABLE voice2020 AS
SELECT
.....此外,如果您已经执行了一次实际查询的数据,则必须在voice2020表中显示它。
Select * from voice2020;发布于 2020-12-05 08:19:33
看起来,您正在尝试将数据从一个表复制到另一个表,如果没有创建该表,是否可以一次创建该表,然后尝试以下语句。
insert into target_table select * from source_table;https://stackoverflow.com/questions/65154496
复制相似问题