如何删除在oracle

时间:2018-08-20 18:57:38

标签: oracle ordbms

如何在不删除整个类型的情况下删除在oracle类型对象内部创建的成员函数?

2 个答案:

答案 0 :(得分:2)

我从未使用过它,但是根据documentation,您也许可以使用

alter type {type_name} DROP MEMBER {function_spec} CASCADE;

请注意,{function_spec}是函数名加RETURN子句,例如

ALTER TYPE ttest DROP MEMBER FUNCTION f_name_2 RETURN VARCHAR2 CASCADE;

此后,您必须重新创建TYPE BODY,而无需删除函数,即CREATE OR REPLACE TYPE BODY ...

答案 1 :(得分:1)

据我所知,您不能这样做(除非您将CREATE OR REPLACE 称为不掉线)。

P.S。更糟糕的是,如果某些依赖类型使用您要删除的成员函数使用该类型,则需要删除所有级联。这意味着-作为一项功能,不必吃饭或喝酒-别理它。

[编辑;看到Wernfried的答案]

看来我错了。显然,它确实有效。语法有些 strange (需要指定RETURN子句(?!?)),但是,嘿-这就是Oracle所说的。所以,今天我学到了一些新东西。

一个例子:

SQL> create or replace type ttest is object
  2    (some_name varchar2(20),
  3     member function f_name return varchar2
  4    );
  5  /

Type created.

SQL> create or replace type body ttest as
  2    member function f_name
  3      return varchar2
  4    is
  5    begin
  6      return self.some_name;
  7    end f_name;
  8  end;
  9  /

Type body created.

SQL> alter type ttest drop member function f_name return varchar2;

Type altered.

SQL> desc ttest
 Name                                      Null?    Type
 ----------------------------------------- -------- ----------------------------
 SOME_NAME                                          VARCHAR2(20)

SQL>