我是数据库的新手,我知道这是一个简单的问题,但我在任何地方都找不到答案,所以我感谢你的帮助。
我有两个表,每个表都有相同的结构。
Table1
CaseNum Number(9,0)
CaseStat Number(5,0)
OpenDate Date
Table2
CaseNum Number(9,0)
CaseStat Number(5,0)
OpenDate Date
然后我尝试创建这个触发器,它将在每次插入或更新table 1时向table 2插入一个新行。关键是要使表2成为表1中更改的历史:
CREATE OR REPLACE TRIGGER TABLE1_HIST
AFTER INSERT OR UPDATE ON TABLE1
FOR EACH ROW
BEGIN
INSERT INTO TABLE2
VALUES (CaseNum, CaseStat, sysdate);
END;
当我尝试创建它时,我得到以下错误:
Error(2,3): PL/SQL: SQL Statement ignored
Error(3,20): PL/SQL: ORA-00984: column not allowed here
但是我反复检查了列类型,在我看来它们都是一样的。
问题是,当我替换VALUES(CaseDate,CaseStat,sysdate)时;用硬编码的数字,我就能制造触发器
这一方法:
CREATE OR REPLACE TRIGGER TABLE1_HIST
AFTER INSERT OR UPDATE ON TABLE1
FOR EACH ROW
BEGIN
INSERT INTO TABLE2
VALUES (123456789, 12345, sysdate);
END;
然而,这显然是没有用的。
任何建议在所有赞赏。
1条答案
按热度按时间d8tt03nd1#
必须在insert语句中指定 values。PL/SQL允许您使用默认绑定变量来引用触发器中update或insert的行级值,如下所示:
此外,通常最好显式指定列顺序之类的内容,而不是信任表中的列顺序,因为列顺序可以更改。