请大家帮忙看看怎么优化这个SQL

[复制链接]
查看11 | 回复6 | 2005-10-9 14:31:29 | 显示全部楼层 |阅读模式
我现在有一句SQL,目的是取得mtl_material_transactions表中在指定时间段内的数据,表中的数据量现在是590多万条,我现在需要做一个Discoverer 的报表,所以这个SQL要写在View 里面,SQL如下:
select /*+ index(mmt mtl_material_transactions_N5) */
mmt.organization_id,
mmt.inventory_item_id,
to_char(trunc(mmt.transaction_date),'yyyymmdd') the_date,
mmt.transaction_quantity qty
from mtl_material_transactions mmt,
org_organization_definitions ood
where 1=1
and mmt.organization_id = ood.organization_id
and to_char(mmt.transaction_date,'yyyymmddhh24miss') >= '20051011080000' and mmt.transaction_type_id in (17,44)
and to_char(mmt.transaction_date,'yyyymmddhh24miss')
= to_date('20051011080000' ,'yyyymmddhh24miss')
但是运行的时候提示是无效的月份,可是我看了一下mmt.transaction_date的格式确实是这种形式的,为了使mmt.transaction_date的索引不失效,又不能转换mmt.transaction_date的格式,可怎么办哪…………
回复

使用道具 举报

千问 | 2005-10-9 14:31:29 | 显示全部楼层
to_date('20051011080000' ,'yyyymmddhh24miss')
没有问题呀, 应该是sql其它的问题
回复

使用道具 举报

千问 | 2005-10-9 14:31:29 | 显示全部楼层
还没找到是什么原因,因为这个日期我是通过一个函数取得的,而且可以得到正确的值,也没有报错,但是我现在把函数里的SQL拿出来执行就报错,按理说如果那个SQL报错,我的函数应该没有返回值才对,郁闷…………
回复

使用道具 举报

千问 | 2005-10-9 14:31:29 | 显示全部楼层
把你的涵数拿出来看看,
也许是你的EXCEPTION屏蔽了错误.
回复

使用道具 举报

千问 | 2005-10-9 14:31:29 | 显示全部楼层
俺找到原因了,刚开始确实是因为转换了transaction_date的格式导致索引失效了,日期格式报错是因为表里有一条垃圾数据,把它清理掉了就ok了,






Thanks !!!
回复

使用道具 举报

千问 | 2005-10-9 14:31:29 | 显示全部楼层
问个很弱的问题,to_char(sysdate,'yyyymmdd')||'080000' 为什么要加080000呢?
回复

使用道具 举报

千问 | 2005-10-9 14:31:29 | 显示全部楼层
最初由 vivi3389 发布
[B]问个很弱的问题,to_char(sysdate,'yyyymmdd')||'080000' 为什么要加080000呢? [/B]

时间.
从8点开始.
回复

使用道具 举报

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

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行