如何删除在 oracle 类型对象中创建的成员函数而不删除整个类型?
问问题
613 次
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 回答