用户定义的类型在使用时丢弃

时间:2017-05-18 07:52:36

标签: sql oracle ddl

我有一个带有表格的Oracle数据库,如下所示:

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

现在,由于一些数据错误,支持团队决定修复将丢弃并重新创建Type。

我现在有一张表格如下:

Table1
Column1 number(5,0),
Column2 null

问题是,我不能放弃桌子,我得到一个"桌子有错误"信息。我不能改变表格,我得到一个"表格有错误"信息。我试图在Oracle SQL Developer中操作DDL,猜猜我得到了什么? A"表有错误"消息。

有人能指出我正确的方向吗?

2 个答案:

答案 0 :(得分: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您的表格。

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

答案 1 :(得分:0)

您可以尝试以下方法 -

  1. 重新创建类型

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

  3. 将数据插入第二个表

  4. 现在使用第二张表。

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