-3

Employee テーブルにトリガーを作成する必要があります。Employee テーブルに対して INSERT または UPDATE ステートメントが発行されると、トリガーが起動し、'salary' フィールドの値が job_min_sal テーブルの基準を満たしていることを確認します。何度も何度も試した後、テーブルの変更エラーが発生し、今では非常にイライラして何をすべきかわかりません。

 JOB_MIN_SALARY TABLE:
  JOB VARCHAR2(50) PRIMARY KEY
  MIN_SAL NUMBER(7,2) NOT NULL

JOB_MIN_SAL テーブルには、さまざまな役職と給与が入力されています。トリガーの操作で混乱していて、ここからどこへ行くべきか助けを得ることができるかどうか疑問に思っています

 CREATE OR REPLACE TRIGGER employee_job_salary
   BEFORE INSERT OR UPDATE OF SALARY on employee
     FOR EACH ROW
     DECLARE 
      v_salary    NUMBER;


    BEGIN
      SELECT minimum_salary
      INTO v_salary
      FROM job_min_salary
      WHERE UPPER(job) = UPPER(:NEW.job);

私は本当に遠く離れていることを知っています。これに必要なものと、これを取得するために必要な手順について、助けを求めているだけです. ありがとう!

 The EMPLOYEE table:

 (
    EMPLOYEE_ID NUMBER(4)
    EMPLOYEE_NAME VARCHAR2(20)
    JOB VARCHAR2(50)
    MANAGER_ID NUMBER(4)
    HIRE_DATE DATE
    SALARY NUMBER(9)
    COMMISION NUMBER(9)
    DEPARTMENT_ID NUMBER(4)
 );
4

2 に答える 2

0
CREATE TABLE job_min_salary
(
    job     VARCHAR2(50) PRIMARY KEY,
    min_sal NUMBER(7,2)  NOT NULL
);

INSERT INTO job_min_salary VALUES('CEO','100');
-- 1 rows inserted.

CREATE TABLE employee
(
    employee_id     NUMBER(4),
    employee_name   VARCHAR2(20),
    job             VARCHAR2(50),
    manager_id      NUMBER(4),
    hire_date       DATE,
    salary          NUMBER(9),
    commision       NUMBER(9),
    department_id   NUMBER(4)
);

INSERT INTO employee VALUES(1, 'Name', 'CEO', 1, TO_DATE('2000-01-01', 'YYYY-MM-DD'), 80, 80, 1);
-- 1 rows inserted.

CREATE OR REPLACE TRIGGER employee_job_salary
BEFORE INSERT OR UPDATE OF salary ON employee
FOR EACH ROW
DECLARE 
    v_salary  NUMBER(1);
BEGIN
    SELECT  1
    INTO    v_salary
    FROM    job_min_salary
    WHERE   UPPER(job)  = UPPER(:NEW.job)
    AND     :NEW.salary >= min_sal;
EXCEPTION
    WHEN NO_DATA_FOUND THEN
        RAISE_APPLICATION_ERROR(-20999, 'Salary value is too low for given job');
END;
-- TRIGGER EMPLOYEE_JOB_SALARY compiled

SELECT * FROM employee;
-- 1    Name    CEO 1   2000-01-01 00:00:00 80  80  1

UPDATE employee
SET    salary = 10
WHERE  job    = 'CEO';
-- ORA-20999: Salary value is too low for given job

UPDATE employee
SET    salary = 100
WHERE  job    = 'CEO';
-- 1 rows updated.

SELECT * FROM employee;
-- 1    Name    CEO 1   2000-01-01 00:00:00 100 80  1
于 2013-06-07T09:34:16.177 に答える
0

新しい給与を最低給与基準と比較し、:new.SALARY >= v_salary の場合にのみ更新するようなことをしているとします。

これが満たされていない場合、あなたは何をしていますか、例外をトラップしているのか、エラーを無視しているのか、エラーコードを返してデバッグしているのか.

詳細を投稿する

于 2013-06-07T07:35:07.490 に答える