不好意思,datafields中间的条件是一样的
90<aa.b<=70
70<aa.b<=50
50<aa.b<=10
90<aa.b<=80
80<aa.b<=40
40<aa.b<=10
90<aa.b<=70
70<aa.b<=50
50<aa.b<=10
90<aa.b<=80
80<aa.b<=40
40<aa.b<=10
解决方案 »
- 问下oracle10g的几本书,在网上有电子中文版的可以下吗?
- 统计出一个表内数据的字节数
- 命令行方式修改oracle process的大小。
- 如果让表中某个范围的记录的某个字段按顺序写值!
- 高分求:Oracle新手面临的难题.如何取得最近更新记录.
- 【求助】如何定时将 数据库A 中数据备份到另一数据库B中?
- 在Unix如何启动db studio等数据库管理配置界面?
- 在Redhat8上装Oracle920刚开始装到jre1.1.8 Copying README时出错,请大虾帮忙!
- 请问一sql语句,涉及到多表,急急急,
- 谁有Oracle的Support Identifier?急用下载Oracle 11.2.0.4补丁。
- 如何返回记录集的第N条开始100条的记录
- !急! oracle中类似SQLSERVER计划任务的功能吗?
输入参数:((B,80,40))包含了三个列的值,而以col为准。
1.定义取col值的一个游标,遍历表cd_data.同时定义一个记录行号的变量:rown。
2.打开游标循环,判断col值是否为B,如果是B,则跳出循环,记录当前rown。
3.写三条UPDATE语句:
a.UPDATE cd_data set end_date=80 where rownum= rown -1;
b.UPDATE cd_data set start_date=80 and end_date=40 where rownum= rown ;
c.UPDATE cd_data set start_date=40 where rownum= rown + 1;
以上只是大概思路。
那么你的那三条更新就没有用了!
as
curosr t_sor is
select col,lag(col,1,null) over(order by col) lag_col,lead(col,1,null) over(order by col) lead_col,start_date,end_date,datafields from cd_data order by col;
begin
for v_sor in t_sor loop
if v_sor.col=p_col then
update cd_data set end_date=p_start where col=v_sor.lag_col;
update cd_data set start_date=p_start,end_date=p_end where col=v_sor.col;
update cd_date set start_date=p_end where col=v_sor.lead_col;
commit;
update cd_date set datafields=start_date||'<'||col||'<='||end_date;
end if;
end loop;
end;
/
如果不是A B C 呢,或如果A B C是颠倒的了如下:
表cd_data
col start_date end_date datafields
--------------------------------------------------------
C 90 70 90<A<=70
A 70 50 70<B<=50
B 50 10 50<C<=10
或
col start_date end_date datafields
--------------------------------------------------------
第一 90 70 90<A<=70
第二 70 50 70<B<=50
第三 50 10 50<C<=10
那么你的结果就不对了啊,请你在看看
select col,lag(col,1,null) over(order by col) lag_col,lead(col,1,null) over(order by col) lead_col,start_date,end_date,datafields from cd_data;
此处不用order by col
col start_date end_date datafields
--------------------------------------------------------
C 90 70 90<A<=70
A 70 50 70<B<=50
B 50 10 50<C<=10
D 10 5 10<C<=5
col start_date end_date datafields
--------------------------------------------------------
C 90 70 90<A<=70
A 70 50 70<B<=50
B 50 10 50<C<=10
D 10 5 10<D<=5
于是你可以用 start_date 定位记录位置。
这样改起来就方便了。
date类型是用一个7位长的数字存储的,所以可以用于唯一索引。怎么觉得跟我以前设计的冬冬那么像?