Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Oracle ORA-01732:使用触发器和联合视图的此视图上的数据操纵操作不合法_Oracle_Triggers_Union - Fatal编程技术网

Oracle ORA-01732:使用触发器和联合视图的此视图上的数据操纵操作不合法

Oracle ORA-01732:使用触发器和联合视图的此视图上的数据操纵操作不合法,oracle,triggers,union,Oracle,Triggers,Union,嗨,我创建了两个表 CREATE TABLE "LCM_001"."LCM_BDT$ACT" ( "ID" NUMBER(*,0) NOT NULL ENABLE, "SHORTDESCRIPTION" VARCHAR2(25 CHAR), "LONGDESCRIPTION" VARCHAR2(500 BYTE), "VALIDFROM" TIMESTAMP (6) WITH LOCAL TIME ZONE, "VALIDTO" TIMES

嗨,我创建了两个表

 CREATE TABLE "LCM_001"."LCM_BDT$ACT" 
   (    "ID" NUMBER(*,0) NOT NULL ENABLE, 
    "SHORTDESCRIPTION" VARCHAR2(25 CHAR), 
    "LONGDESCRIPTION" VARCHAR2(500 BYTE), 
    "VALIDFROM" TIMESTAMP (6) WITH LOCAL TIME ZONE, 
    "VALIDTO" TIMESTAMP (6) WITH LOCAL TIME ZONE, 
    "VERSION" NUMBER(*,0) NOT NULL ENABLE
   ) 
第二个表与第一个表完全相同,因此我创建它时使用了“

然后我创建了一个视图

select * from LCM_BDT$ACT 
Union
select * from LCM_BDT$HIST 
然后我写了一个而不是触发器

create or replace TRIGGER LCM_BDT_DML
  instead of insert 
  on LCM_BDT
  -- for each row
declare
    vAct LCM_BDT$ACT%rowtype;
    vHist LCM_BDT$HIST%rowtype; 
  begin
    IF INSERTING THEN
      select BDT_SEQ.nextval into vAct.id from dual;
      vAct.SHORTDESCRIPTION := :new.SHORTDESCRIPTION;
      vAct.LONGDESCRIPTION := :new.LONGDESCRIPTION;
      vAct.VALIDFROM := sysdate;
      vAct.VALIDTO := TO_TIMESTAMP('31.12.3999','DD.MM.YYYY');
      vAct.Version := 1;
      Insert into LCM_BDT$ACT values vAct;
    END IF;

    IF UPDATING THEN
--      vHist.ID  := :old.ID;
--      vHist.SHORTDESCRIPTION := :old.SHORTDESCRIPTION;
--      vHist.LONGDESCRIPTION := :old.LONGDESCRIPTION;
--      vHist.VALIDFROM := :old.VALIDFROM;
--      vHist.VALIDTO := sysdate;
--      vHist.VERSION := :old.Version;
--      
--      Insert into LCM_BDT$ACT values vAct;
--    -- new record
--      UPDATE LCM_BDT$HIST set 
--      vAct.SHORTDESCRIPTION := :new.SHORTDESCRIPTION;
--      vAct.LONGDESCRIPTION := :new.LONGDESCRIPTION;
--      vAct.VALIDFROM := sysdate;
--      vAct.VALIDTO := TO_TIMESTAMP('31.12.3999','DD.MM.YYYY');
--      vAct.Version := :old.Version +1;
--      Insert into LCM_BDT$HIST values vHist;

    delete from LCM_BDT where id = :old.ID;
    END IF;
END LCM_BDT_DML;
问题是我总是遇到一个SQL错误:

SQL Fehler:ORA-01732:此视图上的数据操作不合法 01732.00000-“此视图上的数据操作不合法” *原因:
*行动:

有什么建议吗


如果更新分支机构的内容包括:

delete from LCM_BDT where id = :old.ID;
这是试图从该触发器所针对的同一视图中删除,而不是任何一个基础表。(假设,如果插入到
BDT$ACT
BDT$HIST
中的内容没有被注释掉,您可能真的想删除旧的
BDT$ACT
记录?或者两者都要删除-可能最终会通过视图删除。)

由于触发器只是
而不是insert
,因此实际上无法到达;但是任何更新或删除视图的尝试都会得到错误,因为触发器不包括这两个操作

您可以通过将触发器更改为以下值来允许更新和删除(删除部分时需要

instead of insert or update or delete
on LCM_BDT

请发布导致此错误的代码。可能需要更新吗?
instead of insert or update or delete
on LCM_BDT