【问题标题】:User defined type dropped while in use使用时丢弃的用户定义类型
【发布时间】:2017-05-19 00:53:36
【问题描述】:

我有一个带有如下表的 Oracle 数据库:

create table Table1
(Column1 number(5,0),
 Column2 special_type);

现在,由于一些数据错误,支持团队决定修复方法是删除并重新创建类型。

我现在有一张表如下:

Table1
Column1 number(5,0),
Column2 null

问题是,我无法删除表格,我收到“表格有错误”消息。我无法更改表格,我收到“表格有错误”消息。我试图在 Oracle SQL Developer 中操作 DDL,猜猜我得到了什么? “表有错误”消息。

谁能指出我正确的方向?

【问题讨论】:

  • 也许在你运行ALTER TABLE table1 DROP UNUSED COLUMNS;之前尝试ALTER TABLE table1 SET UNUSED (Column2);

标签: sql oracle ddl


【解决方案1】:

似乎支持团队已强制放弃该类型。在正常情况下,如果类型有任何依赖表,则不能删除它。

查看演示:

SQL> CREATE OR REPLACE TYPE NUU AS TABLE OF NUMBER;
    /

Type created.

SQL> CREATE TABLE TBLLL(NUM NUU)
NESTED TABLE NUM STORE AS VVVVV ;
/
Table created.

现在当我尝试做一个简单的 drop 类型时,我得到以下错误:

SQL> drop  type nuu;
drop  type nuu
*
ERROR at line 1:
ORA-02303: cannot drop or replace a type with type or table dependents

于是我强行放下:

SQL> drop  type nuu force;

Type dropped.

当我尝试进行选择时,我得到了错误:

SQL> select * from tblll;
select * from tblll
              *
ERROR at line 1:
ORA-04063: table "USER.TBLLL" has errors

所以为了Alter表你首先需要创建type回来。重新创建 type 后,您的表定义将变为 correct,然后您可以 Alter 您的表。

其他解决方案是删除表并重新创建您已经提到的不起作用。

【讨论】:

  • 是什么让你认为这是一个 DBA 做的?
【解决方案2】:

您可以尝试以下方法-

  1. 重新创建类型

  2. 创建另一个具有相同表结构的表

  3. 将数据插入第二张表

现在使用第二个表。

您可能不希望重新创建该类型,因为它在较早时引起了问题。寻找替代方案。它可能会解决您的问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-08-26
    • 2014-01-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多