我有两个表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