如何删除在oracle中创建的成员函数
如何删除在oracle type对象中创建的成员函数而不删除整个类型?据我所知,您不能删除(除非调用CREATE或REPLACE不删除) 另外,更糟糕的是,如果有依赖类型将该类型与要删除的成员函数一起使用,则需要删除所有级联。这意味着,作为一个功能,不必吃或喝,让它自己去吧 [编辑;在看到Wernfried的答案后] 看来我错了。显然,它确实有效。语法有点奇怪(它需要指定RETURN子句(?!?),但是嘿,这就是Oracle所说的。所以,今天我学到了一些新东西 例如:如何删除在oracle中创建的成员函数,oracle,ordbms,Oracle,Ordbms,如何删除在oracle type对象中创建的成员函数而不删除整个类型?据我所知,您不能删除(除非调用CREATE或REPLACE不删除) 另外,更糟糕的是,如果有依赖类型将该类型与要删除的成员函数一起使用,则需要删除所有级联。这意味着,作为一个功能,不必吃或喝,让它自己去吧 [编辑;在看到Wernfried的答案后] 看来我错了。显然,它确实有效。语法有点奇怪(它需要指定RETURN子句(?!?),但是嘿,这就是Oracle所说的。所以,今天我学到了一些新东西 例如: SQL> creat
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>
就我所知,您不能(除非您调用CREATE或REPLACE来禁止删除) 另外,更糟糕的是,如果有依赖类型将该类型与要删除的成员函数一起使用,则需要删除所有级联。这意味着,作为一个功能,不必吃或喝,让它自己去吧 [编辑;在看到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>
我从来没用过,但根据你的说法
alter type {type_name} DROP MEMBER {function_spec} CASCADE;
注意,{function\u spec}
是函数名加返回子句,例如
ALTER TYPE ttest DROP MEMBER FUNCTION f_name_2 RETURN VARCHAR2 CASCADE;
之后,您必须在没有删除功能的情况下重新创建类型正文,即,
创建或替换类型正文…
我从未使用过它,但根据您可能能够使用它
alter type {type_name} DROP MEMBER {function_spec} CASCADE;
注意,{function\u spec}
是函数名加返回子句,例如
ALTER TYPE ttest DROP MEMBER FUNCTION f_name_2 RETURN VARCHAR2 CASCADE;
之后,您必须重新创建类型主体,而不使用删除的函数,即创建或替换类型主体…正确,它可以工作。我不知道,所以-谢谢你,@Wernfried。我很确定这在早期版本的Oracle中是不可能的。也许它是在11年加入的。的确,它起作用了。我不知道,所以-谢谢你,@Wernfried。我很确定这在早期版本的Oracle中是不可能的。也许它是在11年加入的。2请检查“desc ttest”命令,看看函数是否已从类型中删除。因为对我来说,它也将输出作为类型更改,但类型具有functionSure;我添加了DESC命令的结果,并更新了我的消息。数据库版本为11.2.0.4.0是否可以检查“desc ttest”命令,查看函数是否已从类型中删除。因为对我来说,它也将输出作为类型更改,但类型具有functionSure;我添加了DESC命令的结果,并更新了我的消息。数据库版本为11.2.0.4.0