【问题标题】:I would like to update the table but the error code 'PLS-00103' occurs every time I try this我想更新表格,但每次尝试时都会出现错误代码“PLS-00103”
【发布时间】:2016-12-12 15:42:06
【问题描述】:
DECLARE 
    Emp_Number NUMBER(5);
    Salary NUMBER(5);
    Salary_increment NUMBER(5);
BEGIN
     SELECT Employee_Salary 
     INTO Salary 
     FROM EMPLOY_TABLE;
END;
BEGIN
     SELECT Employee_ID 
     INTO Emp_Number 
     FROM EMPLOY_TABLE;
END;
BEGIN
    IF Salary <= 20000 THEN
       Salary_increment := (Salary/100) * 12.5;
    ELSIF Salary > 20000 AND employee_Salary <= 40000 THEN
       Salary_increment := (Salary/100) * 11.5;
    ELSE
        Salary_increment := (Salary/100) * 10;
    END IF;

    UPDATE EMPLOY_TABLE 
    SET Employee_Salary = Salary + Salary_increment  
    WHERE Employee_ID = Emp_Number;
END;

【问题讨论】:

  • 错字提醒:这是薪水 - 不是“薪水” ....
  • 但我知道这不会导致错误 marc_s

标签: stored-procedures plsql oracle11g


【解决方案1】:

您有太多的 BEGIN 和 END。变量的范围仅限于它们被声明的块(以及其中的任何嵌套块)。例如,变量salary 在第三块中是不可访问的。试试:

DECLARE 
    Emp_Number NUMBER(5);
    Salary NUMBER(5);
    Salary_increment NUMBER(5);
BEGIN
     SELECT Employee_Salary 
     INTO Salary 
     FROM EMPLOY_TABLE;

     SELECT Employee_ID 
     INTO Emp_Number 
     FROM EMPLOY_TABLE;

    IF Salary <= 20000 THEN
       Salary_increment := (Salary/100) * 12.5;
    ELSIF Salary > 20000 AND employee_Salary <= 40000 THEN
       Salary_increment := (Salary/100) * 11.5;
    ELSE
        Salary_increment := (Salary/100) * 10;
    END IF;

    UPDATE EMPLOY_TABLE 
    SET Employee_Salary = Salary + Salary_increment  
    WHERE Employee_ID = Emp_Number;
END;

如果您需要嵌套块,例如用于异常处理,您可以这样做:

DECLARE 
    Emp_Number NUMBER(5);
    Salary NUMBER(5);
    Salary_increment NUMBER(5);
BEGIN
     BEGIN
       SELECT Employee_Salary 
       INTO Salary 
       FROM EMPLOY_TABLE;
     END;
     BEGIN
       SELECT Employee_ID 
       INTO Emp_Number 
       FROM EMPLOY_TABLE;
     END;
     BEGIN
       IF Salary <= 20000 THEN
           Salary_increment := (Salary/100) * 12.5;
       ELSIF Salary > 20000 AND employee_Salary <= 40000 THEN
           Salary_increment := (Salary/100) * 11.5;
       ELSE
           Salary_increment := (Salary/100) * 10;
       END IF;

       UPDATE EMPLOY_TABLE 
       SET Employee_Salary = Salary + Salary_increment  
       WHERE Employee_ID = Emp_Number;
    END;
END;

但这在这里是多余的。

【讨论】:

    猜你喜欢
    • 2020-06-26
    • 2020-12-26
    • 2022-11-07
    • 2021-08-11
    • 1970-01-01
    • 2021-12-12
    • 1970-01-01
    • 2014-04-12
    • 2020-05-18
    相关资源
    最近更新 更多