Ill*_*gal 3 sql oracle oracle12c
我的 Oracle 12c 数据库中有一个系统生成的序列,我似乎无法摆脱它。在它上面调用“drop sequence”会得到这个错误:
错误代码:ORA-32794
说明:无法删除系统生成的序列
原因:尝试删除系统生成的序列。
行动:不能删除系统生成的序列,例如为标识列创建的序列。
该序列用于为表的 Id 列生成值,并且该表不再存在。通常,我可以创建和删除这样的表,序列也会随之删除。我不知道在这种情况下删除表的语句,但我真的很想删除杂散序列。
Wil*_*son 14
您不需要显式删除标识列序列,因为它与表相关联,并且使用purge选项删除表(或正常删除并清空回收站)也将删除该序列。
create table test_tbl (id number generated as identity);
Table created.
select * from user_tab_identity_cols;
TABLE_NAME COLUMN_NAME GENERATION_TYPE SEQUENCE_NAME IDENTITY_OPTIONS
------------------------------ ----------- --------------- ------------- --------------------------------------------------------------------------------
TEST_TBL ID ALWAYS ISEQ$$_124811 START WITH: 1, INCREMENT BY: 1, MAX_VALUE: 9999999999999999999999999999, MIN_VAL
Run Code Online (Sandbox Code Playgroud)
删除表会将表及其序列留在回收站中:
drop table test_tbl;
Table dropped.
select * from user_tab_identity_cols;
TABLE_NAME COLUMN_NAME GENERATION_TYPE SEQUENCE_NAME IDENTITY_OPTIONS
------------------------------ ----------- --------------- ------------- --------------------------------------------------------------------------------
BIN$gQ8wv//QTjK+mAGxdffxgQ==$0 ID ALWAYS ISEQ$$_124811 START WITH: 1, INCREMENT BY: 1, MAX_VALUE: 9999999999999999999999999999, MIN_VAL
Run Code Online (Sandbox Code Playgroud)
清空回收站将其清除:
purge recyclebin;
Recyclebin purged.
select * from user_tab_identity_cols;
no rows selected
select * from user_sequences where sequence_name like 'ISEQ$$%';
no rows selected
Run Code Online (Sandbox Code Playgroud)