如何在不删除整个类型的情况下删除在oracle类型对象内部创建的成员函数?
答案 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>