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
相关文档:
update :单表的更新不用说了,两者一样,主要说说多表的更新
Oracle> Oracle的多表更新要求比较严格,所以有的时候不是很好写,我们可以试试Oracle的游标
&n ......
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的常用函数对比
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 ......
由于以前都是在sqlserver 2005处理,现在客户要求oracle数据库服务器,
最初的代码为:
allRecordSize = (Integer) rs1.getObject(1); //Integer allRecordSize=0;
当执行的时候报:BigDecimal无法转化为Integer类型
为了兼容两者修改后的代码为:
Object o = rs1.getObject(1);
&nbs ......