select (jbqk_dy/ygzs)*100 from T_DYJBXXTJB_TEMP是不是可以写成select (jbqk_dy/decode(ygzs,0,'',ygzs)*100 from T_DYJBXXTJB_TEMP我做了简单测试好象行的通,我刚学,请多多指教。
解决方案 »
- 两个表的行数相同,合并两个表中的列,组成一个新表,如何保证没有重复的数据?
- 我想请问一下oracle存储过程新增更新的问题
- length()问题求教?
- 缺失右括号????
- 相信高手们都已解决这个问题,请帮小弟一把
- 关于日期比较的疑问,请各位解答
- 求助:sql语句如何实现截取字符串
- 一个非常奇怪的数据库连接异常问题?急需解答!
- 已经安装oracle9i后为什么不能安装developer2k,提示oraclehome已经被用,can not be used as oracle home for nt
- 大难点(数据库方在)
- 散分了,请教各位大虾,有关Oracle的简单问题,凡回答者均送分!
- 修改机器名后,如何连接数据库?
OPEN c_jg;
<<xx>>
begin
FETCH c_jg INTO v_jgbh,v_jgmc;
WHILE c_jg%FOUND LOOP
sql_str:='update T_DYJBXXTJB_TEMP '||
'set '||
'jbfx_dy=(select (jbqk_dy/ygzs)*100 from T_DYJBXXTJB_TEMP where jgbh='''||v_jgbh||''')'||
' where jgbh='''||v_jgbh||''''||
'jbfx_zg=.........;
EXECUTE IMMEDIATE sql_str;
FETCH c_jg INTO v_jgbh,v_jgmc;
END LOOP;
exception
when others then
goto xx;
end;
CLOSE c_jg;
end;
/
SQL> select * from a; ID
---------
0
2
SQL> select 123/decode(id,0,'',id) from a;123/DECODE(ID,0,'',ID)
---------------------- 61.5
FETCH c_jg INTO v_jgbh,v_jgmc;
WHILE c_jg%FOUND LOOP
sql_str:='update T_DYJBXXTJB_TEMP '||
'set '||
'jbfx_dy=(select decode(ygzs,0,0,jbqk_dy/ygzs)*100 from T_DYJBXXTJB_TEMP where jgbh='''||v_jgbh||''')'||
' where jgbh='''||v_jgbh||''''||
'jbfx_zg=.........;
EXECUTE IMMEDIATE sql_str;
FETCH c_jg INTO v_jgbh,v_jgmc;
END LOOP;
CLOSE c_jg;
create view zeroYgzs(jbbh,.......) as
select jbbh,..... from T_DYJBXXTJB_TEMP where ygzs is null or ygzs=0;
否则,可以创建另一个临时表,存ygzs为null或0的信息;之后,用原来的存储过程进行操作。
我想,在数据量大的情况下可能会好一点。
用decode实现:
OPEN c_jg;
FETCH c_jg INTO v_jgbh,v_jgmc;
WHILE c_jg%FOUND LOOP
sql_str:='update T_DYJBXXTJB_TEMP '||
'set '||
'jbfx_dy=(select decode(ygzs,0,0,jbqk_dy/ygzs)*100 from T_DYJBXXTJB_TEMP where jgbh='''||v_jgbh||''')'||
' where jgbh='''||v_jgbh||''''||
'jbfx_zg=.........;
EXECUTE IMMEDIATE sql_str;
FETCH c_jg INTO v_jgbh,v_jgmc;
END LOOP;
CLOSE c_jg;
FETCH c_jg INTO v_jgbh,v_jgmc;
WHILE c_jg%FOUND LOOP
sql_str:='update T_DYJBXXTJB_TEMP '||
'set '||
'jbfx_dy=(select (jbqk_dy/ygzs)*100 from T_DYJBXXTJB_TEMP where jgbh='''||v_jgbh||''')'||
' where jgbh='''||v_jgbh||''''||
'jbfx_zg=.........;
begin
EXECUTE IMMEDIATE sql_str;
exception
when others then
null;
end;
FETCH c_jg INTO v_jgbh,v_jgmc;
END LOOP;
CLOSE c_jg;
ttjd(ttjd) , bzszp(SongZip) , zhaoyongzhu(zhaoyongzhu) ,zhangshunshi(宇轩),
其实是一个方法(略有不同),都是对的!
gyang(我是谁?) 的方法和black_dragon(半仙) 的方法不能达到目的,
我要在一个循环里更新多个字段的值,你们的方法在更新前面的字段出现
异常后就跳过该循环了,其余的字段没有能更新。
谢谢各位!