我有三张桌子:
- 员工(ssn,工资)。
- WORKS_ON(essn、pid、小时)。
- 项目(pid,pname)。
EMPLOYEE 的示例数据:
insert into EMPLOYEE values('1011', 1000)
insert into EMPLOYEE values('1012', 1200).
WORKS_ON 的示例数据
insert into WORKS_ON values('1011',80, 60)
insert into WORKS_ON values('1012',90, 40).
PROJECT 的示例数据
insert into PROJECT values(80, A)
insert into PROJECT values(90, B).
我需要创建一个存储过程,如果工作时间超过 50 小时,则将他/她的工资设置为 10%。
这就是我所做的,我在更新时遇到了问题(也许我的整个代码都是错误的),我已经尝试了很多次但仍然遇到问题,请帮助我
CREATE OR REPLACE PROCEDURE employee_details(p_ssn IN CHAR) AS
v_ssn employee.ssn%TYPE;
v_sal employee.salary%TYPE;
w_hours works_on.hours%TYPE;
BEGIN
SELECT ssn, salary, hours
INTO v_ssn, v_sal, w_hours
FROM employee NATURAL JOIN works_on
WHERE ssn = p_ssn
AND ssn = essn;
DBMS_OUTPUT.PUT_LINE('Employee_ssn :' || v_ssn);
DBMS_OUTPUT.PUT_LINE('Employee_sal :' || v_sal);
DBMS_OUTPUT.PUT_LINE('Work_hours :' || w_hours);
IF w_hours > 60.0 THEN
v_sal := v_sal + (v_sal * .1);
END IF;
UPDATE employee
SET salary = v_sal
WHERE ssn = essn
AND ssn = p_ssn;
EXCEPTION
WHEN NO_DATA_FOUND THEN
DBMS_OUTPUT.PUT_LINE('No data found.');
WHEN TOO_MANY_ROWS THEN
DBMS_OUTPUT.PUT_LINE('Many rows fetched.');
END;
错误:
17/1 PL/SQL:忽略 SQL 语句
19/13 PL/SQL:ORA-00904:“ESSN”:标识符无效
我的预期结果应该是
Employee_ssn : 1011
Employee_sal : 1100
Work_hours : 60
谢谢你!