2

在 oracle 12g 上我有一张桌子

CREATE TABLE OLDTABLE ("COLOR" CHAR(3 BYTE) NOT NULL ENABLE, "OBJECT_TYPE" VARCHAR2(8 BYTE) NOT NULL ENABLE);
create or replace synonym SYN_TO_OLDTABLE for OLDTABLE;

带有颜色/对象列表,例如“BLK”、“CUP”

INSERT INTO OLDTABLE(COLOR,OBJECT_TYPE) values ('BLK','CUP');
COMMIT;

我需要不在 OLDTABLE 中添加行并复制值,以便所有“黑色”项目也是“绿色”,所以我创建了一个视图

create or replace view VW_TO_OLDTABLE as 
   select COLOR, OBJECT_TYPE from OLDTABLE
  UNION
   select 'GRN', OBJECT_TYPE from OLDTABLE where COLOR = 'BLK'
   ;

现在我很高兴,我替换了同义词以显示视图而不是表格。

create or replace synonym SYN_TO_OLDTABLE for VW_TO_OLDTABLE;

现在我对 rusult 感到非常满意,但我遇到了一个问题......问题是我需要更新视图,但是 oracle 文档说它不能完成,因为视图有一个 UNION 语句。

   insert into SYN_TO_OLDTABLE(COLOR,OBJECT_TYPE)  values ('AAA','BBB');
   commit;

文档和在线研究也建议使用而不是触发器,这没关系,但我必须对许多其他表(如 150)重复相同的过程,有更多的列,我不想创建 350 个触发器,因为它维护将是地狱(添加/删除列,更改表,更改列等)。

所以......问题是:

  • 是否有另一种方法可以在不使用 UNION 语句且不向表中添加行的情况下复制值?

谢谢

4

0 回答 0