我试图在SQL Developer中编译下面的触发器,但出现了几个错误。
CREATE OR REPLACE TRIGGER myschema.my_trigger AFTER
INSERT OR UPDATE ON myschema.my_table
REFERENCING
NEW AS new
OLD AS old
FOR EACH ROW
DECLARE
cat_id NUMBER(38, 0);
BEGIN
SELECT
the_cat_id
INTO cat_id
FROM
myschema.some_random_table cfg
WHERE
cfg.sn = :new.sn;
IF inserting THEN
INSERT INTO myschema.target_table (
cat_id,
sn,
ch,
cc,
amnt
) VALUES (
cat_id,
:new.sn,
:new.ch,
:new.cc,
:new.amnt
);
END IF;
IF updating THEN
UPDATE myschema.target_table
SET
rsrv_amnt = :new.amnt
WHERE
cc = :new.cc
AND ch = :new.ch
AND sn = :new.sn;
END IF;
END;
SQL Developer显示以下错误。
Trigger my_trigger compiled
LINE/COL ERROR
--------- -------------------------------------------------------------
13/9 PL/SQL: SQL Statement ignored
20/13 PL/SQL: ORA-00984 column not allowed here
Errors: check compiler log
有人能告诉我我做错了什么吗?注意:我故意屏蔽了Real列名和表名,这是我用Oracle编写的第一个触发器。
1条答案
按热度按时间lztngnrs1#
如果触发器中使用表确实使用了您发布的列,则该触发器将编译:
触发器:
你说过:
注意:我故意屏蔽了Real列名和表名
那样的话,你真的不能指望我们盲目地猜测你做错了什么。可以是任何内容(任何列和/或任何表)。