【问题标题】: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;
【问题讨论】:
标签:
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;
但这在这里是多余的。