2
Iは第3のテーブルにすべての相対情報(複数行)をトリガし、コピーすることができ、テーブルの単一の行を削除しようとしています。単一のSQL Triggerを使用して、単一の削除から複数の行をコピーしますか?
表:学生
NAME AGE
----- ------
Mark 19
Jim 21
Scott 22
表:グレード
NAME GRADE
----- ------
Mark 95
Mark 98
Jim 60
Scott 100
Scott 79
Scott 77
表:バックアップ(私が何をトリガ私は下に簡単な例を構築してきました達成するため)
SQL> DELETE FROM STUDENTS WHERE NAME='MARK';
SQL> SELECT * FROM BACKUP;
NAME AGE GRADE
----- ------ ------
Mark 19 95
Mark 19 98
上記の例では、行 "Mark ... 30"を削除すると、 "Mark"を名前として2番目のテーブルの2行が削除されます。私はこれを行う方法がわかりません。私はトリガコードをコンパイルすることができますが、 "DELETE FROM STUDENTS WHERE NAME = 'MARK'"を呼び出すと、多列エラーが返されます。以下は、1行の結果だけを受け入れるを選択しその中に作るので、あなたはあまりにも多くの行を取得する私のコード
マイコード
CREATE OR REPLACE TRIGGER save_the_grades
BEFORE DELETE
ON grades
FOR EACH ROW
DECLARE
v_grade number(3);
BEGIN
SELECT grade INTO v_grade FROM Grades WHERE Names=:old.name;
INSERT INTO backup
(name, age, grade)
VALUES
(:old.name, :old.age, v_grade);
END;
削除されたレコードを残しておきたい場合は、より良いシステムではテーブル行にフラグを付けることはできませんし、削除されたとしてフラグが立てられます。 –
StackOverflowの怒りが私にもたらされる危険性がありますが、これはトリガーが必要な宿題に関連しています。しかし、この問題はこれよりはるかに大きいです。私はそれをどうやって行うのかを感じてみようとしています。 – Noah
これは、MySQL、SQL Server、およびOracleのためにこれをタグ付けしました。それらは3つの異なる手続き型言語拡張とトリガーを定義する3つの非常に異なる構文のセットを持つ3つの異なるデータベースです。残りの質問から推測するには、Oracleを使用しているので、MySQLとSQL Serverのタグを削除する必要があります。 –