私は3つのテーブルを持っています:
- EMPLOYEE (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% に設定します。
これは私がやったことです.UPDATEに問題がありました(コード全体が間違っている可能性があります)。何度も試しましたが、まだ問題が発生しています.助けてください.
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
ありがとう!