tableA と tableB の 2 つのテーブルがあります。トリガーを設定したい。tableA で挿入が発生すると、tableB でいくつかのイベントがトリガーされる場合があります。
2 つのテーブルは、たとえば次のようになります。
- tableA 列: (product_id、product_name、manufacture)
- tableB 列: (buyer, product_id)
私がやりたいことは、新しい行をテーブル A に挿入した後、その product_name が null の場合、tableB で更新をトリガーすることです。tableB の行の製造元が新しく挿入された製造元と同じである場合は、tableB の product_id をこの新しく挿入された product_id に更新します。
CREATE TRIGGER t1
AFTER INSERT ON tableA
FOR EACH ROW WHEN (NEW.product_name is NULL)
BEGIN
UPDATE tableB
SET tableB.product_id = :NEW.product_id
WHERE tableB.product_id IN (SELECT tableA.product_id
FROM tableA
WHERE tableA.manufacture = :NEW.manufacture);
END;
SQL開発者では常にいくつかのエラーが発生します。
Error(2,2): PL/SQL: SQL Statement ignored
Error(2,120): PL/SQL: ORA-00933: SQL command not properly ended
Error(2,36): PL/SQL: ORA-00904: "NEW"."product_id": invalid identifier
Error: PLS-00801: internal error [ph2csql_strdef_to_diana:bind]
アップデート:
CREATE TABLE "tableA"
(
"PRODUCT_ID" NUMBER PRIMARY KEY,
"PRODUCT_NAME" VARCHAR2(50 BYTE) DEFAULT NULL,
"MANUFACTURE" VARCHAR2(50 BYTE) DEFAULT NULL
)
CREATE TABLE "tableB"
(
"BUYER_ID" NUMBER PRIMARY KEY,
"PRODUCT_ID" NUMBER DEFAULT NULL
)