我有兩個表tableA和tableB。我想設置一個觸發器。一旦在tableA中發生插入,它可能會觸發tableB中的一些事件。oracle觸發錯誤
兩個表如下所示,例如,
- 表A列:(產品,PRODUCT_NAME,製造)
- tableB的列:(買家,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 Developer中的幾個誤區:
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
)
退房[此帖](http://publib.boulder.ibm.com /infocenter/idshelp/v10/index.jsp?topic=/com.ibm.sqlt.doc/sqltmst324.htm),它有一個類似於你正在做的事情的例子。 – 2011-04-18 02:07:24
問題是我認爲語法是正確的。我不是爲什麼oracle會抱怨。 – chnet 2011-04-18 02:19:33
你可以發佈創建表語句嗎?它會幫助您重現您的確切問題。 – 2011-04-18 02:27:24