01422. 00000 - “确切的提取返回超过请求的行数”

时间:2017-05-05 18:36:55

标签: sql oracle

DECLARE 
    EMPLEADO EMPLOYEES.EMPLOYEE_ID%TYPE;
    SALARIO EMPLOYEES.SALARY%TYPE;
BEGIN
    select employee_id , salary INTO EMPLEADO , SALARIO
    FROM EMPLOYEES
    WHERE EMPLOYEE_ID > = '100' AND EMPLOYEE_ID < = '120';
    IF SALARIO > 100000 THEN
    DBMS_OUTPUT.PUT_LINE('El salario actual del empleado '||empleado||' es de '||salario||'.'|| 'Es un excelente salario');
    elsif SALARIO > 9000 AND SALARIO < 100000 THEN
    DBMS_OUTPUT.PUT_LINE('El salario actual del empleado '||empleado||' es de '||salario||'.'|| 'Es un salario normal');
    ELSIF SALARIO < 9000 THEN
    DBMS_OUTPUT.PUT_LINE('El salario actual del empleado '||empleado||' es de '||salario||'.'|| 'Es un salario normal');
    end if;
end;

1 个答案:

答案 0 :(得分:1)

您可以使用光标处理:

SET SERVEROUTPUT ON

DECLARE
  CURSOR CURSOR1 IS
    SELECT EMPLOYEE_ID, SALARY
      FROM EMPLOYEES
     WHERE EMPLOYEE_ID >= '100' AND EMPLOYEE_ID <= '120';          
EMPLEADO EMPLOYEES.EMPLOYEE_ID%TYPE;
SALARIO EMPLOYEES.SALARY%TYPE;
BEGIN
  FOR REC IN CURSOR1 LOOP
    EMPLEADO := REC.EMPLOYEE_ID;
    SALARIO := REC.SALARY;
    IF SALARIO > 100000 THEN
       DBMS_OUTPUT.PUT_LINE('El salario actual del empleado '||empleado||' es de '||salario||'.'|| 'Es un excelente salario');
    ELSIF SALARIO > 9000 AND SALARIO < 100000 THEN
       DBMS_OUTPUT.PUT_LINE('El salario actual del empleado '||empleado||' es de '||salario||'.'|| 'Es un salario normal');
    ELSIF SALARIO < 9000 THEN
       DBMS_OUTPUT.PUT_LINE('El salario actual del empleado '||empleado||' es de '||salario||'.'|| 'Es un salario normal');
    END IF;
    EMPLEADO := NULL;
    SALARIO := NULL;
  END LOOP;
END;

正如尼古拉斯五世指出的那样,你表明工资&lt; 9000也很正常 - 这可能是一个错字。