求教plsql中update数据的问题。

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了求教plsql中update数据的问题。相关的知识,希望对你有一定的参考价值。

假定有2张表,表A中有字段ID,得分1,得分2,得分3. 表B字段为ID,最终得分。
UPDATE表B最终得分的依据为如果nvl(得分1,0)<>0,则赋值为A的得分1字段,否则如果nvl(得分2,0)<>0则赋为得分2,nvl(得分2,0)=0则赋为得分3.不知UPDATE的语句该如何写,求教

建议使用plsql块来写:
begin
--先查出A表中的记录(存在相关B表的记录为前提,避免无用数据),进行循环
for item in (select id, 得分1, 得分2, 得分3 from A where exists(select 1 from B where A.id = B.id)) loop
--然后判断每次循环的值,进行update
if nvl(item.得分1, 0) <> 0 then
update B set 最终得分 = item.得分1 where id = item.id;
elsif nvl(item.得分2, 0) <> 0 then
update B set 最终得分 = item.得分2 where id = item.id;
else
update B set 最终得分 = item.得分3 where id = item.id;
end if;
end loop;
end;
-- 如果在plsql中控制事务,需要commit
commit;

有疑问发追问。
参考技术A UPDATE
B
SET
最终得分 = (
SELECT
NVL( 得分1, NVL( 得分2, NVL( 得分3, 0)))
FROM
A
WHERE
A.ID = B.ID
);

没测试过, 估计着写的.
参考技术B DECLARE
w_count INTEGER;--接收分数
BEGIN
SELECT id INTO w_count FROM A ;

CASE w_count
WHEN 0 THEN UPDATE语句
WHEN 1 THEN UPDATE语句
WHEN 2 THEN UPDATE语句
以此类推谢谢

END CASE;
END;

以上是关于求教plsql中update数据的问题。的主要内容,如果未能解决你的问题,请参考以下文章

oracle存储过程中update语句一直在执行中,无法更新完成

求教大神,update tb set a=a*10报错将 numeric 转换为数据类型 numeric 时出现算术溢出错误

plsql中对我的用户对表A有update权限,但是使用Update更新A表数据时又提示权限不足,请问大神是怎么回事?

求教Oracle内存数据库timesten的使用

oracle 中plsql 怎样写更新一行的语句(高手请进)

PLSQL 数据中去掉 字段有空格 回车 换行