如何删除在oracle中创建的成员函数

How can I delete a member function created in oracle

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

据我所知,你不能(除非你调用 CREATE OR REPLACE 不删除)。

P.S。更糟糕的是,如果依赖类型使用带有您想要删除的成员函数的类型,您将需要删除所有级联。这意味着 - 作为一个功能不必吃或喝 - 别管它。

[编辑;在看到 Wernfried 的回答后]

看来我错了。显然,它确实有效。语法有点 奇怪 (它需要指定 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>

我从未使用过它,但根据 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 ...