customers:
+------------+--------------+
| cid | Name |
+------------+--------------+
| 1 | Bob |
| 2 | John |
| 3 | Jane |
+------------+--------------+
accounts:
+------------+--------------+
| aid | type |
+------------+--------------+
| 1 | Checking |
| 2 | Saving |
| 3 | Checking |
+------------+--------------+
transactions:
+------------+--------------+--------------+--------------+
| tid | cid | aid | type |
+------------+--------------+--------------+--------------+
| 1 | 1 | 1 | Open |
| 2 | 2 | 3 | Open |
| 3 | 1 | 2 | Open |
| 4 | 2 | 3 | Deposit |
+------------+--------------+--------------+--------------+
新しいアカウントが正常に開かれたときにログテーブルに書き込むトリガーを書き込もうとしています。
今私はこれを持っています:
CREATE OR REPLACE TRIGGER acc_opened
BEFORE INSERT ON transactions
FOR EACH ROW
DECLARE
c_name customers.name%TYPE;
BEGIN
IF :new.type = 'Open' THEN
SELECT name into c_name
FROM customers c
WHERE c.cid = :new.cid;
INSERT INTO logs (who, what) VALUES (c_name, 'An account has been opened');
END;
/
私が持っているコードは機能せず、ここからどこに行くべきかわかりません。
トリガーは完了しますが、起動すると次のエラーメッセージが表示されます。
PLS-00103:次のいずれかが必要な場合にシンボル「END」が発生しました:(ループmodnullプラグマがreturnselect updateを発生させ、<<続行してclose current delete fetch lock insert open rollback savepoint setsqlexecutの場合にgotoのexitを宣言しますforallマージパイプパージをコミットします