如何删除在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 ...
如何在不删除整个类型的情况下删除在 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 ...