我的代码是
DECLARE
v_salary emp.sal%TYPE;
v_empno emp.empno%TYPE;
NUM NUMBER(9):=0;
BEGIN
LOOP
NUM :=NUM+1;
SELECT e.sal INTO v_salary FROM emp e
WHERE e.empno=NUM; --每次只取一个员工的薪水
IF v_salary<1000 THEN
UPDATE emp SET emp.comm='100' WHERE emp.empno=NUM;--根据员工编号修改福利
END IF;
IF v_salary<3000 AND v_salary>=1000 THEN
UPDATE emp SET emp.comm='50' WHERE emp.empno=NUM;
END IF;
IF v_salary<7000 AND v_salary>=3000 THEN
UPDATE emp SET emp.comm='25' WHERE emp.empno=NUM;
END IF;
IF v_salary>=7000 THEN
UPDATE emp SET emp.comm='10' WHERE emp.empno=NUM;
END IF;
EXIT WHEN NUM=10;--循环次数
END LOOP;
END;
DECLARE
v_salary emp.sal%TYPE;
v_empno emp.empno%TYPE;
NUM NUMBER(9):=0;
BEGIN
LOOP
NUM :=NUM+1;
SELECT e.sal INTO v_salary FROM emp e
WHERE e.empno=NUM; --每次只取一个员工的薪水
IF v_salary<1000 THEN
UPDATE emp SET emp.comm='100' WHERE emp.empno=NUM;--根据员工编号修改福利
END IF;
IF v_salary<3000 AND v_salary>=1000 THEN
UPDATE emp SET emp.comm='50' WHERE emp.empno=NUM;
END IF;
IF v_salary<7000 AND v_salary>=3000 THEN
UPDATE emp SET emp.comm='25' WHERE emp.empno=NUM;
END IF;
IF v_salary>=7000 THEN
UPDATE emp SET emp.comm='10' WHERE emp.empno=NUM;
END IF;
EXIT WHEN NUM=10;--循环次数
END LOOP;
END;
解决方案 »
- 在线等待高手解答,latch: cache buffers chains事件怎么解决!
- oracle rman问题!!!在线等
- 这个怎么实现
- 新手数据库恢复问题
- 如何将数据库从windows 移植到linux
- 为什么我的数据库中没有internal的用户??
- 如何在orcale中实现同SQL SERVER 2000 SELECT TOP 语句?急急急急急急
- 如何把表中content字段中的'abc' 替换为‘xyz'?
- 在P4的机器上安装Oracle8.17,为何不能安装???
- Couldn't perform the edit because another user changed the record.(再线等待,谢谢解决)
- ORACLE 的 decode函数能否嵌套其他语句呢?
- ORACLE应用运行太慢!!!求助找原因
update emp set comm=(case
when sal<1000 then 100
when sal>=1000 and sal<2000 then 80
when sal>=2000 and sal<6000 then 50
end)
where ……
create table emp(
id number,
name varchar2(20),
sal number,
fun number
)update emp t set t.fun=(case when sal<1000 then 100 when sal<2000 and sal>=1000 then 80
when sal>=2000 and sal<6000 then 50 end
)
能用一条语句解决问题就用一条语句解决,即简洁又高效
update emp set comm=(case
when sal<1000 then 100
when sal>=1000 and sal<2000 then 80
when sal>=2000 and sal<6000 then 50
end)
where …… 正解
when sal<1000 then 100
when sal>=1000 and sal<2000 then 80
when sal>=2000 and sal<6000 then 50
end)
where 条件表达式;
使用case when 比较简洁。