Oracle 案例陈述的“ORA-00905:缺少关键字”

Oracle 案例陈述的“ORA-00905:缺少关键字”,oracle,plsql,case,Oracle,Plsql,Case,我试图写一份案例陈述,如果你的工资在某一特定范围内,根据工资范围,工资应该乘以20%或25%。你的案例陈述有几个问题: DECLARE var_employee_number VARCHAR2(30); var_employee_name VARCHAR2(30); var_salary VARCHAR2(30); BEGIN SELECT employee_number,employee_name, CASE var_salary WHEN salary <= 10000 THE

我试图写一份案例陈述,如果你的工资在某一特定范围内,根据工资范围,工资应该乘以20%或25%。

你的案例陈述有几个问题:

DECLARE
var_employee_number VARCHAR2(30);
var_employee_name VARCHAR2(30);
var_salary VARCHAR2(30);
BEGIN
SELECT employee_number,employee_name,
CASE var_salary
    WHEN salary <= 10000 THEN salary:= salary* .02 /*I am getting an error over here*/
    WHEN salary BETWEEN 10000 AND 15000 THEN salary := salary * .02
    WHEN salary BETWEEN 15000 AND 20000 THEN salary := salary * .025
    END AS salary INTO var_employee_number,var_employee_name,var_salary
FROM EMPLOYEES
WHERE employee_number := var_employee_number;
dbms_output.put_line('The salary is '||var_salary);
END;
因此,纠正这些问题时,应将其改为:

CASE var_salary -- you don't need var_salary here
    WHEN salary <= 10000 THEN salary:= salary* .02 /*I am getting an error over here*/ -- you don't need "salary:=" here
    WHEN salary BETWEEN 10000 AND 15000 THEN salary := salary * .02
    WHEN salary BETWEEN 15000 AND 20000 THEN salary := salary * .025
END AS salary
您可能还注意到,您的案例陈述的案例有几个问题:

DECLARE
var_employee_number VARCHAR2(30);
var_employee_name VARCHAR2(30);
var_salary VARCHAR2(30);
BEGIN
SELECT employee_number,employee_name,
CASE var_salary
    WHEN salary <= 10000 THEN salary:= salary* .02 /*I am getting an error over here*/
    WHEN salary BETWEEN 10000 AND 15000 THEN salary := salary * .02
    WHEN salary BETWEEN 15000 AND 20000 THEN salary := salary * .025
    END AS salary INTO var_employee_number,var_employee_name,var_salary
FROM EMPLOYEES
WHERE employee_number := var_employee_number;
dbms_output.put_line('The salary is '||var_salary);
END;
因此,纠正这些问题时,应将其改为:

CASE var_salary -- you don't need var_salary here
    WHEN salary <= 10000 THEN salary:= salary* .02 /*I am getting an error over here*/ -- you don't need "salary:=" here
    WHEN salary BETWEEN 10000 AND 15000 THEN salary := salary * .02
    WHEN salary BETWEEN 15000 AND 20000 THEN salary := salary * .025
END AS salary
您可能还注意到,您的案例陈述的案例有几个问题:

DECLARE
var_employee_number VARCHAR2(30);
var_employee_name VARCHAR2(30);
var_salary VARCHAR2(30);
BEGIN
SELECT employee_number,employee_name,
CASE var_salary
    WHEN salary <= 10000 THEN salary:= salary* .02 /*I am getting an error over here*/
    WHEN salary BETWEEN 10000 AND 15000 THEN salary := salary * .02
    WHEN salary BETWEEN 15000 AND 20000 THEN salary := salary * .025
    END AS salary INTO var_employee_number,var_employee_name,var_salary
FROM EMPLOYEES
WHERE employee_number := var_employee_number;
dbms_output.put_line('The salary is '||var_salary);
END;
因此,纠正这些问题时,应将其改为:

CASE var_salary -- you don't need var_salary here
    WHEN salary <= 10000 THEN salary:= salary* .02 /*I am getting an error over here*/ -- you don't need "salary:=" here
    WHEN salary BETWEEN 10000 AND 15000 THEN salary := salary * .02
    WHEN salary BETWEEN 15000 AND 20000 THEN salary := salary * .025
END AS salary
您可能还注意到,您的案例陈述的案例有几个问题:

DECLARE
var_employee_number VARCHAR2(30);
var_employee_name VARCHAR2(30);
var_salary VARCHAR2(30);
BEGIN
SELECT employee_number,employee_name,
CASE var_salary
    WHEN salary <= 10000 THEN salary:= salary* .02 /*I am getting an error over here*/
    WHEN salary BETWEEN 10000 AND 15000 THEN salary := salary * .02
    WHEN salary BETWEEN 15000 AND 20000 THEN salary := salary * .025
    END AS salary INTO var_employee_number,var_employee_name,var_salary
FROM EMPLOYEES
WHERE employee_number := var_employee_number;
dbms_output.put_line('The salary is '||var_salary);
END;
因此,纠正这些问题时,应将其改为:

CASE var_salary -- you don't need var_salary here
    WHEN salary <= 10000 THEN salary:= salary* .02 /*I am getting an error over here*/ -- you don't need "salary:=" here
    WHEN salary BETWEEN 10000 AND 15000 THEN salary := salary * .02
    WHEN salary BETWEEN 15000 AND 20000 THEN salary := salary * .025
END AS salary

您可能还注意到,为什么要将数字放入VARCHAR2变量中?var_employee_number的值来自何处?为什么要将一个数字放入VARCHAR2变量中?var_employee_number的值来自何处?为什么要将一个数字放入VARCHAR2变量中?var_employee_number的值来自何处?为什么要将一个数字放入VARCHAR2变量中?var_employee_number的值从何而来?感谢您的帮助!!谢谢你的帮助!!谢谢你的帮助!!谢谢你的帮助!!