我创建了一个包含成员函数的类型。而且我还为该成员函数创建了体型。我需要一种方法来放弃身体和成员的功能。落下身体被执行了。但是不能放弃会员功能。那么任何人都可以帮忙吗?
答案 0 :(得分:1)
您无法删除它,因为Type
用于任何对象定义中的某个位置。见下面的演示:
- 创建类型
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;
- Dropping Type body。它被放弃了
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
个对象。就我而言,它是我创建的table
。因此我放弃了它;
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';
答案 1 :(得分:0)
您需要编辑类型规范和正文以删除成员函数(或删除正文),然后重新编译规范(如果仍需要,则重新编译正文)。
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
)
/
查询1 :
SELECT object_name, status
FROM user_objects
<强> Results 强>:
| OBJECT_NAME | STATUS |
|-------------|--------|
| TEST_TYPE | VALID |
如果类型具有依赖类型,则需要在重新编译类型之前删除它们,然后重新创建它们。