在APPLICATION 的FORM中有如下一段语句:
v_b := sysdate;
SELECT count(*)
  into v_count
  FROM px_ar_invoice_print_v 
 WHERE (PX_AR_INVOICE_PRINT_V.TAX_PRINT_FLAG<>'Y' OR 
       PX_AR_INVOICE_PRINT_V.TAX_PRINT_FLAG IS NULL)
   AND (PX_AR_INVOICE_PRINT_V.PRINTED<>'Y' OR 
       PX_AR_INVOICE_PRINT_V.PRINTED IS NULL) 
   AND PX_AR_INVOICE_PRINT_V.INVOICE_DATE>='6-MAY-2004' 
   AND PX_AR_INVOICE_PRINT_V.INVOICE_DATE<='6-MAY-2004'  ;
v_e := sysdate;

fnd_message.debug(v_count||':'||(v_e-v_b));--显示查找到600条记录,花去6秒
      
go_block('PX_AR_INVOICE_PRINT_V');
clear_block(no_commit);
v_b := sysdate; 
set_block_property('PX_AR_INVOICE_PRINT_V',default_where,v_where_1||v_where_2||v_where_3||v_where_4||v_where_5||v_where_6);
/*其中DEFAULT_WHERE的语句与上面的WHERE语句相同*/execute_query;
v_e := sysdate;fnd_message.debug('execute_query:'||(v_e-v_b));--结果执行不到这一步,程序一直在写TEMP TABLESPACE,直到TEMP TABLESPACE的空间爆掉。请高手解答,谢谢!!!

解决方案 »

  1.   

    先把v_where_1||v_where_2||v_where_3||v_where_4||v_where_5||v_where_6显示出来看看,可能与上面不同呢
      

  2.   

    我显示了,与上面是一样的。我在怀疑是否是APPLICATION中SQL的PARSE过程出错了,没有优化,解析后执行时没有用到INDEX,因这个VIEW关联的TABLE比较多,而且数据量特别大,所以如果没有用到INDEX的话就可能会出现总是写TEMP表空间的问题,不知道对不对?如果对,那APPLICATION中是否要设置什么东西?又或者是否是数据库那边有问题?请高手帮忙!