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

oracle update 和 临时表的 弱处!

曾经面试的时候有公司问ORACLE 开发不足之处有哪些? 当时不懂。最近才感受到,我想那就是UPDATE和临时表的使用上。
原本我要对一个表生成统计数据 该表的结构如下
周次,星期,商店,参观人数,购买人数,参观人次,购买人次。
200928,星期一,女装店,30,5,45,6.
虽然看起来很简单,实际上每个人数和人次都是个子查询而得来的数字。还有个问题就是有些店铺可以没有营业状态,那么其数字该为零。
也就说时间的生成 (周次,星期) 是不能依据店铺的营业时间为生成标准,得靠自然时间。从第一家店铺营业时间为起始点到统计的截止时间。
v_startday-->trunc(sysdate,'d') 然后采用循环插入进去
for i in 0..(v_endate-v_startday)
loop
   insert into a 
   select to_char(v_currday,'yyyyiw'),to_char(v_currday,'day'), store_name, B.num,C.num,D.num,E.num
   left join (  select b.num from ..... where  open_day between v_currday and v_currday+1) on .....
   left join (  select c.num from ..... where  open_day between v_currday and v_currday+1) on .....
   left join (  select d.num from ..... where  open_day between v_currday and v_currday+1) on .....
   left join (  select e.num from ..... where  open_day between v_currday and v_currday+1) on .....
  order by  ......
end loop
速度超慢 而且IO量也好低 从10G的EM上 看一条
2 接着的办法是想到 先插入时间序列 然后在UPDATE 空值的数据。
for i in 0...(v_enddate-v_startday)
loop
  insert into a (f_yeaweek,f_weekday)
   values(to_char(v_currday,'yyyyiw'),to_char(v_currday,'day');
end loop;
 update a
  set  (store_name,looknum,buynum,looks,buys) =
    (
      select  f_yearweek,f_weekday,s.store_name,B.num,C.num,D.num,E.num
      from
      ( select * from s
      left join ( select  count() from b where open_day between v_startdayand v_endate+1) on ...
    &nbs


相关文档:

mysql与Oracle update的区别

update :单表的更新不用说了,两者一样,主要说说多表的更新
   
       Oracle> Oracle的多表更新要求比较严格,所以有的时候不是很好写,我们可以试试Oracle的游标
               &n ......

mysql,sqlserver,oracle三种数据库的大对象存取

mysql 大对象存取:
  类型一般应该用mediumblod,
  blob只能存2的16次方个byte,
  mediumblod是24次方,
  一般来说够用了.longblob是32次方有些大.
  MYSQL默认配置只能存1M大小的文件,要修改配置,WIN版本的在mysql.ini文件中
  修改max_allowed_packet,net_buffer_length等几个参数,或直接SET GLOBAL va ......

SQLServer和Oracle的常用函数对比

SQLServer和Oracle的常用函数对比
  1.绝对值
  S:select abs(-1) value
  O:select abs(-1) value from dual
  2.取整(大)
  S:select ceiling(-1.001) value
  O:select ceil(-1.001) value from dual
  3.取整(小)
  S:select floor(-1.001) value
  O:select floor(-1.001) valu ......

oracle与sqlserver执行count(*)返回的结果兼容

由于以前都是在sqlserver 2005处理,现在客户要求oracle数据库服务器,
最初的代码为:
allRecordSize = (Integer) rs1.getObject(1);    //Integer allRecordSize=0;
当执行的时候报:BigDecimal无法转化为Integer类型
为了兼容两者修改后的代码为:
  Object o = rs1.getObject(1);
 &nbs ......
© 2009 ej38.com All Rights Reserved. 关于E健网联系我们 | 站点地图 | 赣ICP备09004571号