잘 이해하면 INSTEAD OF
트리거가 필요할 수 있습니다. 그런 트리거를 만들려면 테이블 위에 VIEW를 만들고이 뷰에서 트리거를 작성해야합니다. 예를 들어
은, 당신이 말 :
create sequence SEQ_CYCLE maxValue 3 cycle nocache;
create table TEST_CYCLE (logId number, someColumn varchar2(20));
당신은보기와보기를 통해 트리거를 만들 수 있습니다 : 당신이보기에 삽입물을 할 경우
create or replace view v_test_cycle as select * from test_cycle;
create or replace trigger trgCycle
instead of insert on v_test_cycle
for each row
declare
vCheck number;
vSeqVal number := SEQ_CYCLE.nextVal;
begin
select count(*)
into vCheck
from v_test_cycle
where logId = vSeqVal;
--
if vCheck = 0 then
insert into test_cycle(logId, someColumn) values (vSeqVal, :NEW.someColumn);
else
update test_cycle
set someColumn = :NEW.someColumn
where logId = vSeqVal;
end if;
end;
, 이것은 무엇을 당신 얻으십시오 :
SQL> select * from test_cycle;
no rows selected
SQL> insert into v_test_cycle(someColumn) values('some value 1');
1 row created.
SQL> insert into v_test_cycle(someColumn) values('some value 2');
1 row created.
SQL> insert into v_test_cycle(someColumn) values('some value 3');
1 row created.
SQL> insert into v_test_cycle(someColumn) values('some value 4');
1 row created.
SQL> insert into v_test_cycle(someColumn) values('some value 5');
1 row created.
SQL> select * from test_cycle;
LOGID SOMECOLUMN
---------- --------------------
1 some value 4
2 some value 5
3 some value 3
SQL>
귀하의 요구 사항은 테이블의 임의의 행을 덮어 쓰는 것입니까? 매혹적인. – APC
할 수 있는지 묻는다면, 질문은 당신이 이것을해야하는지 아닌지이며 대답은 아니오입니다. 순서에 숫자 제한을두기 만하면 중복에 대해 걱정할 필요가 없습니다. 또한 12C를 사용하면 시퀀스를 열에 대한 기본값으로 지정할 수 있습니다. – unleashed