1

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

4

2 回答 2

3

我从未使用过它,但根据您可能可以使用的文档

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 ...

于 2018-08-20T20:30:10.477 回答
1

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

PS 更糟糕的是,如果有依赖类型将类型与您想要删除的成员函数一起使用,您将需要删除所有内容 cascade。这意味着——作为一个函数不必吃或喝——别管它。

[编辑; 看到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>
于 2018-08-20T19:45:32.753 回答