Plsql For循环和嵌套If循环
不知道此plsql语句有什么问题:Plsql For循环和嵌套If循环,plsql,Plsql,不知道此plsql语句有什么问题: SET SERVEROUTPUT ON DECLARE CURSOR EMP_UPDATE IS SELECT EMP_ID ,NAME ,DESIGNATION ,SALARY ,GRADE FROM EMPLOYEE1; BEGIN FOR REC IN EMP_UPDATE LOOP IF REC.EMP_ID <= MAX(REC.EMP_ID) TH
SET SERVEROUTPUT ON
DECLARE
CURSOR EMP_UPDATE IS
SELECT EMP_ID ,NAME ,DESIGNATION ,SALARY ,GRADE
FROM EMPLOYEE1;
BEGIN
FOR REC IN EMP_UPDATE LOOP
IF REC.EMP_ID <= MAX(REC.EMP_ID)
THEN
IF REC.NAME IS NOT NULL
THEN
IF REC.SALARY <= 1000
THEN
UPDATE EMPLOYEE1 SET GRADE = 'D' WHERE EMP_ID = REC.EMP_ID;
ELSE IF REC.SALARY BETWEEN 1001 AND 5000 THEN
UPDATE EMPLOYEE1 SET GRADE = 'C' WHERE EMP_ID = REC.EMP_ID;
ELSE IF REC.SALARY BETWEEN 5001 AND 10000 THEN
UPDATE EMPLOYEE1 SET GRADE = 'B' WHERE EMP_ID = REC.EMP_ID;
ELSE IF REC.SALARY BETWEEN 10000 AND 20000 THEN
UPDATE EMPLOYEE1 SET GRADE = 'A' WHERE EMP_ID = REC.EMP_ID;
ELSE IF REC.SALARY > 20000 THEN
UPDATE EMPLOYEE1 SET GRADE = 'S' WHERE EMP_ID = REC.EMP_ID;
ELSE
UPDATE EMPLOYEE1 SET REC.NAME = (SELECT NAME FROM EMPL_DATABASE ED WHERE ED.EMP_ID = REC.EMP_ID) WHERE EMP_ID = REC.EMP_ID;
END IF;
END IF;
END IF;
END LOOP;
END;
/
打开服务器输出
声明
光标EMP_更新为
选择EMP_ID、姓名、职务、工资、等级
来自雇员1;
开始
对于EMP_更新循环中的REC
如果REC.EMP_ID,以下是语法问题:
- 使用
ELSIF
而不是ELSE IF
- 去掉
MAX(REC.EMP\u ID)
行。不能对这样的游标执行聚合,它必须是SQL语句的一部分。但你不需要这么做
不管怎样,还是要这样做。当不再有行时,循环光标将自动停止
以下是一些通用编程建议:
- 样式和格式很重要。它们将帮助您和其他人理解代码
- 始终以尽可能小的代码开始,并在遇到单个错误时停止。调试复杂性随着bug的数量呈指数增长
您将遇到编译错误。
不需要多个端如果
正确的查询:
DECLARE
CURSOR EMP_UPDATE IS
SELECT EMP_ID ,NAME ,DESIGNATION ,SALARY ,GRADE
FROM EMPLOYEE1 for update ;
BEGIN
FOR REC IN EMP_UPDATE LOOP
IF REC.EMP_ID <= MAX(REC.EMP_ID) and REC.NAME IS NOT NULL and REC.SALARY <= 1000
THEN
UPDATE EMPLOYEE1 SET GRADE = 'D' WHERE EMP_ID = REC.EMP_ID;
ELSE IF REC.SALARY BETWEEN 1001 AND 5000 THEN
UPDATE EMPLOYEE1 SET GRADE = 'C' WHERE EMP_ID = REC.EMP_ID;
ELSE IF REC.SALARY BETWEEN 5001 AND 10000 THEN
UPDATE EMPLOYEE1 SET GRADE = 'B' WHERE EMP_ID = REC.EMP_ID;
ELSE IF REC.SALARY BETWEEN 10000 AND 20000 THEN
UPDATE EMPLOYEE1 SET GRADE = 'A' WHERE EMP_ID = REC.EMP_ID;
ELSE IF REC.SALARY > 20000 THEN
UPDATE EMPLOYEE1 SET GRADE = 'S' WHERE EMP_ID = REC.EMP_ID;
ELSE
UPDATE EMPLOYEE1 SET REC.NAME = (SELECT NAME FROM EMPL_DATABASE ED WHERE ED.EMP_ID = REC.EMP_ID) WHERE EMP_ID = REC.EMP_ID;
END IF;
END LOOP;
END;
声明
光标EMP_更新为
选择EMP_ID、姓名、职务、工资、等级
来自员工1的更新信息;
开始
对于EMP_更新循环中的REC
如果REC.EMP_ID欢迎使用堆栈溢出!声明应该做什么而不是做什么?请将其编辑到您的问题中。您的错误是什么?请先学习基本语法。