我的Oracle Trigger语法之一需要帮助
CREATE OR REPLACE TRIGGER "TRG_TRIGGER" AFTER INSERT
ON T_TABLE
REFERENCING NEW AS NEW OLD AS OLD
FOR EACH ROW
BEGIN
INSERT INTO T_TABLE_TEST
(DOC_ID , DOC_NAME)
VALUES
(:NEW.DOC_ID, SELECT DOC_NAME FROM OTHER_TABLE WHERE DOC_ID=DOC_ID);
需要其他桌面的DOC_NAME。我想只需要修改我的选择查询吗?
答案 0 :(得分:3)
正如其他人所建议的那样,你可以将insert ... values语句重写为insert ...作为select语句,这将是最有意义的。
只是fyi,你的原始插入语句有两个问题突然出现在我身上:
您在select语句中指定了doc_id = doc_id
,而我认为您的意思是doc_id = :new.doc_id
。如果您的查询能够运行,您的查询将返回另一个表中的所有行,并且您将获得ORA-01427: single-row subquery returns more than one row
。
您没有将select语句括在括号内。它应该是:
-
INSERT INTO T_TABLE_TEST
(DOC_ID , DOC_NAME)
VALUES
(:NEW.DOC_ID, (SELECT DOC_NAME FROM OTHER_TABLE WHERE DOC_ID=:NEW.DOC_ID));
答案 1 :(得分:2)
您需要指定要选择的doc_name,因此我认为您缺少where子句..试试这个:
INSERT INTO T_TABLE_TEST
(DOC_ID , DOC_NAME)
SELECT t.doc_id, t.DOC_NAME FROM OTHER_TABLE t where t.doc_id = :NEW.DOC_ID;
当然我猜测其他表的列名为doc_id,将其更改为关系列。
答案 2 :(得分:2)
插入必须如下:
REFERENCING NEW AS NEW OLD AS OLD
只需注意,您可以跳过OLD
,因为NEW
和{{1}}是默认设置。