易截截图软件、单文件、免安装、纯绿色、仅160KB

oracle 应用中遇到的问题

1、多表联合查询时,一定要对每一列指定表名(包括条件中的列
今天晚上易方达进行验收测试时,发现一个问题:
打开开放式基金指令快速下达界面时,发生oracle错误,错误描述如下:
ORA-00918: 未明确定义列,详细信息见图ERR1.JPG。
错误的原因为:中间层(business\pm\func\ GetMonitorCmndData.java)写SQL语句时,部分列没有指定对应的表名。
 
此问题在公司的电脑上都不会发生(数据库包括:9i和10g),所以此问题特别隐蔽。
 
大家以后在先sql语句和存储过程时,一定要注意:
多表联合查询时,一定要对每一列指定表名(包括条件中的列)。
 
 
2、在查询语句的条件中尽量避免使用函数
在修改bug过程中,常发现一些查询语句的条件中出现函数的情况,如:
    DELETE from acc_balance
     WHERE host_id = r_cell.cell_id
       AND host_type = '1'
       AND balance_date < fn_acc_PreNumDate(v_p_fundid,'0',v_accdate,5);
      
    目的是为了删除超过5个交易日的数据,这里使用了我们自己写的函数 fn_acc_preNumDate,
    在sql语句检索时,如果acc_balance表中有1万条数据要删除,则此删除语句会执行此函数至少1万次,导致无谓的耗时。
  
    解决方法,如果fn_acc_preNumDate返回的数据一直不改变,则可以讲其赋值给变量。通过变量去执行sql语句。
    如:
    v_preNumDate := fn_acc_PreNumDate(v_p_fundid,'0',v_accdate,5);
 
    DELETE from acc_balance
     WHERE host_id = r_cell.cell_id
       AND host_type = '1'
       --AND balance_date < fn_acc_PreNumDate(v_p_fundid,'0',v_accdate,5);
       AND balance_date < v_preNumDate;
    这样fn_acc_prenumdate函数只需要执行一次即可达到删除数据目的。
 
各位同事如果碰到这种情况,可以将其更改一下。提升运行效率。
查询中避免使用to_date函数
如果把一个日期字符串转换为日期格式,比如日期字符串


相关文档:

[Oracle]高效的PL/SQL程序设计(五)

本系列文章导航
[Oracle]高效的PL/SQL程序设计(一)--伪列ROWNUM使用技巧
[Oracle]高效的PL/SQL程序设计(二)--标量子查询
[Oracle]高效的PL/SQL程序设计(三)--Package的优点
[Oracle]高效的PL/SQL程序设计(四)--批量处理
[Oracle]高效的PL/SQL程序设计(五)--调用存储过程返回结果集
[Oracle]高效的PL/SQL程序设计(六)- ......

Oracle中用一句SQL语句实现行列转换

SQL*PLus>   desc   emp;  
    名称                                                                   &nbs ......

mysql 与Oracle 函数对比

Oracle函数和mysql函数比较
1.       Oracle中的to_number()转换成数字;
Oracle> Select to_number(‘123’) from dual;  -----         123;
           &nbs ......

sqlserver移植为Oracle笔记

Oracle笔记
l         关于TRUNC函数
   SELECT
   RELATED_ID ,
      DOC_ID ,
      CAT_ID ,
      CAT_CODE ,
      RELEASE_DATE ,
&n ......
© 2009 ej38.com All Rights Reserved. 关于E健网联系我们 | 站点地图 | 赣ICP备09004571号