Oracle 表删除是否也会触发删除其所有序列?

Does Oracle table drop also trigger dropping all its sequences?

提问人:Nikolas Charalambidis 提问时间:8/8/2022 最后编辑:Nikolas Charalambidis 更新时间:8/9/2022 访问量:265

问:

例如,我有一个称为 Oracle 的表,它有一个序列。我想在单个命令中删除一个表及其序列。APP_TABLESEQ_TABLE

请注意,该序列是通过 Hibernate 生成的(它是“系统生成的”序列吗?

<generator class="native">
    <param name="sequence">SEQ_TABLE</param>
</generator>

是否也会触发在 Oracle 中删除其序列?我已经在文档中搜索了(我使用的是 19c 版本),我了解到它的所有索引和触发器都被删除了,但没有关于序列的内容(尽管信息可能不完整)。DROP TABLE APP_TABLE

如何通过显式找出并按其名称执行删除来确保底层序列也被删除而不删除它?

Spring Oracle 休眠 序列 oracle19c

评论

1赞 astentx 8/8/2022
这回答了你的问题吗?无法删除系统生成的序列

答:

1赞 Gary Myers 8/8/2022 #1

如果序列确实是表定义的“部分”(在这种情况下,它在USER_TAB_IDENTITY_COLS中明显链接),那么它将被删除。否则,它是一个独立的对象,将保留。

评论

0赞 Nikolas Charalambidis 8/8/2022
谢谢你的回答。我已经在 Data Grip 中查看了表的 DDL,但我没有看到有关其序列的信息,因此它看起来像一个独立的对象(我不知道如何使用:结果为 0 行)。所以我想序列没有链接并且会保留,所以我应该手动删除它。我说得对吗?USER_TAB_IDENTITY_COLSselect * from USER_TAB_IDENTITY_COLS
0赞 Dmitry Demin 8/9/2022 #2

如果在触发器中使用了要删除的序列,则可以对它们进行 drop sql。

select 'DROP SEQUENCE '||REFERENCED_OWNER||'.'||REFERENCED_NAME||' ;'  from user_dependencies
where name in (select TRIGGER_NAME from user_triggers
                where BASE_OBJECT_TYPE = 'TABLE'
                  and TABLE_NAME = 'NAME_OF_TABLE')  
and referenced_type = 'SEQUENCE';