在oracle中的类型中删除成员方法

在oracle中的类型中删除成员方法,oracle,Oracle,我已经创建了一个包含成员函数的类型。我还为该成员函数创建了主体类型。我需要一种方法来删除主体和成员函数。扔下尸体被处死。但无法删除成员函数。那么有人能帮忙吗?您不能放弃它,因为类型在您的任何对象定义中的某个位置都被使用。请参阅下面的演示: --创建类型 CREATE OR REPLACE TYPE EXMPL_Type AS OBJECT ( Team VARCHAR2 (30), TeamScore NUMBER (1), MAP MEMBER FUNCTION team_r

我已经创建了一个包含成员函数的类型。我还为该成员函数创建了主体类型。我需要一种方法来删除主体和成员函数。扔下尸体被处死。但无法删除成员函数。那么有人能帮忙吗?

您不能放弃它,因为
类型在您的任何对象定义中的某个位置都被使用。请参阅下面的演示:

--创建类型

CREATE OR REPLACE TYPE EXMPL_Type AS OBJECT
(
   Team VARCHAR2 (30),
   TeamScore NUMBER (1),
   MAP MEMBER FUNCTION team_rating
      RETURN NUMBER
);
/
--创建类型主体

CREATE OR REPLACE TYPE BODY EXMPL_Type
AS
   MAP MEMBER FUNCTION team_rating
      RETURN NUMBER
   IS
      avg_score   NUMBER;
   BEGIN
      SELECT AVG (TeamScore)
        INTO avg_score
        FROM Team_Table ;

      RETURN avg_score;
   END;
END;
/
--创建类型为的表

CREATE TABLE ABC OF EXMPL_TYPE;
--下降式机身。它掉了

DROP TYPE BODY EXMPL_Type;
--获取错误

DROP TYPE EXMPL_Type;
错误:

SQL>     DROP TYPE EXMPL_Type;
    DROP TYPE EXMPL_Type
*
ERROR at line 1:
ORA-02303: cannot drop or replace a type with type or table dependents
因此,您需要先删除
dependent
对象。在我的例子中,是我创建的
表。所以我先把它放下

SQL>  DROP TABLE ABC;

Table dropped.

SQL>  DROP TYPE EXMPL_Type;

Type dropped.
您可以在DBA_DEPENDENCIES表中找到依赖对象:请参见以下内容:

SELECT REFERENCED_NAME, REFERENCED_TYPE
  FROM DBA_DEPENDENCIES
 WHERE name = 'EXMPL_TYPE';

您需要编辑类型规范和正文以删除成员函数(或删除正文),然后重新编译规范(如果仍然需要,还需要正文)

Oracle 11g R2架构设置

CREATE TYPE test_type IS OBJECT(
  value NUMBER,
  MEMBER FUNCTION getValue RETURN NUMBER
)
/

CREATE TYPE BODY test_type IS 
  MEMBER FUNCTION getValue RETURN NUMBER
  IS BEGIN RETURN self.value; END;
END;
/

DROP TYPE BODY test_type
/

CREATE OR REPLACE TYPE test_type IS OBJECT(
  value NUMBER
)
/
SELECT object_name, status
FROM   user_objects
| OBJECT_NAME | STATUS |
|-------------|--------|
|   TEST_TYPE |  VALID |
查询1

CREATE TYPE test_type IS OBJECT(
  value NUMBER,
  MEMBER FUNCTION getValue RETURN NUMBER
)
/

CREATE TYPE BODY test_type IS 
  MEMBER FUNCTION getValue RETURN NUMBER
  IS BEGIN RETURN self.value; END;
END;
/

DROP TYPE BODY test_type
/

CREATE OR REPLACE TYPE test_type IS OBJECT(
  value NUMBER
)
/
SELECT object_name, status
FROM   user_objects
| OBJECT_NAME | STATUS |
|-------------|--------|
|   TEST_TYPE |  VALID |

CREATE TYPE test_type IS OBJECT(
  value NUMBER,
  MEMBER FUNCTION getValue RETURN NUMBER
)
/

CREATE TYPE BODY test_type IS 
  MEMBER FUNCTION getValue RETURN NUMBER
  IS BEGIN RETURN self.value; END;
END;
/

DROP TYPE BODY test_type
/

CREATE OR REPLACE TYPE test_type IS OBJECT(
  value NUMBER
)
/
SELECT object_name, status
FROM   user_objects
| OBJECT_NAME | STATUS |
|-------------|--------|
|   TEST_TYPE |  VALID |
如果该类型具有依赖类型,则需要在重新编译该类型之前删除这些类型,然后再重新创建它们