是否有可能自动删除触发器和序列,当我删除表



我使用的是Oracle XE。是否有任何方法来删除触发器和序列自动当我删除表?这是我的表,序列和触发器:

create table country(
country_id number(5) primary key,
country varchar2(36),
country_code varchar2(3)
);
create sequence country_seq
start with 1 increment by 1;
create or replace trigger country_trig
before insert on country
referencing new as new
for each row
begin
select country_seq.nextval into :new.country_id from dual;
end;
/

当主表记录删除时,我使用这个,然后子表的所有记录都自动删除

create sequence创建的序列不与任何特定的表相关联,因此它们永远不会自动删除。首先,您可以为多个表重用一个序列。一个序列不可能只属于一个表。

唯一自动删除的序列是作为标识列的一部分生成的序列。(这个特性是在Oracle 12.1中添加的,当你标记11g时,这意味着你没有标识列。)

演示使用标识列(12.1及更高版本):

create table demo
( demo_id integer generated always as identity
, some_column varchar2(20) );
create or replace trigger demo_trg
before insert on demo for each row
begin
dbms_output.put_line('Trigger firing: '||$$plsql_unit);
end demo;
/

现在我有了一个带有触发器的表,还有一个与标识列相关联的序列:

select * from user_tab_identity_cols where table_name = 'DEMO';
TABLE_NAMECOLUMN_NAMEGENERATION_TYPESEQUENCE_NAMEIDENTITY_OPTIONS
DEMODEMO_IDALWAYSISEQ$$_88798START WITH: 1, INCREMENT BY: 1, MAX_VALUE: 999999999999999999999999999999, MIN_VALUE: 1, CYCLE_FLAG: N, CACHE_SIZE: 20, ORDER_FLAG: N, SCALE_FLAG: N, EXTEND_FLAG: N, SESSION_FLAG: N, KEEP_VALUE: N