deptの最後の従業員がempテーブルから削除されると、deptがdeptテーブルから削除されるトリガーを作成する必要があります。
EMP(EMPNO、ENAME、DEPTNO)
DEPT(DEPTNO、DNAME)PLSQL_triggerに準拠することができません
まず、IはDEPTNO所与DEPT表からDEPTを削除する手順を作成しました。
CREATE OR REPLACE PROCEDURE del_dept
(v_dno in number)
is
begin
delete from DEPT where deptno = v_dno;
end;
次に、その部門の最後のempが削除されたときにその部門を削除するトリガーを作成しました。私はdeptno10で3つのempのうちの1つを削除してトリガーをテストしようとしましたが、トリガーが無効で再検証に失敗したというコマンドからエラーメッセージが出ました。
create or replace trigger del_dept
after delete on EMP
for each row
DECLARE
emp_count Number;
g_dno Number;
begin
SELECT COUNT(:old.ename) INTO emp_count FROM emp group by deptno;
FOR i IN 1.. emp_count LOOP
IF i = emp_count THEN
del_dept(g_dno);
end if;
END LOOP;
End;
**削除がある何 – hmmftg
に行われた直後に、emp表から**削除しないフォームやアプリケーションでそれを実行します。以下を参照してください。これで 'FOR'ループが必要ですか? 'del_dept'を呼び出すと、' g_dno'の値は何ですか? – Nitish
FORループの私の理由は、その部門のすべてのempをチェックすることです。最後のempでない場合は、deptではなくempを削除してください。私はこの状態をチェックするためにトリガーが必要ないと思う。 g_dnoの値はold.deptnoです。 INパラメータとOUTパラメータを混同しました。手続き/関数を呼び出すときには、INパラメータの値を指定する必要があります。ここで、g_dnoはINパラメータです.Hence、呼び出し元のルーチンにolddeptnoという値を指定する必要があります。 – user7770852