在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 |
如果该类型具有依赖类型,则需要在重新编译该类型之前删除这些类型,然后再重新创建它们