oracle删除一些表数据,然后释放表空间的存储过程

发布网友 发布时间:2022-04-23 15:26

我来回答

7个回答

热心网友 时间:2022-04-11 06:10

create or replace procere ttt is
begin
delete from bbb where。。。。。。 ;
commit;
execute immediate 'create table aaa as select * from bbb';
commit;
--删除表bbb所有数据
execute immediate 'truncate table bbb';
commit;
--将临时表aaa的数据转移到bbb表中
insert into bbb select * from aaa;
commit;
--删除临时表aaa
execute immediate 'drop table aaa';
commit;
end;

顺便说一句,你之前为什么要delete表bbb里的数据呢?还有,你存储过程里没end
---------补充------
||是用来区分普通字段和变量字段的
他那个写法不和我这个一样吗?

他那个只不过把我单引号里的sql设置成了一个变量,叫str

热心网友 时间:2022-04-11 07:28

将你要执行的语句拼好赋给一个varchar2变量sql_str,然后Execute Immediate sql_str;commit;
这样就好了,记住每一次execute后都commit一下,要不有的事务是没提交的。

热心网友 时间:2022-04-11 09:03

||是连接字符串的符号,如果你table name和字段名没有用变量就不用连接,直接写成:

str:='create table test(aa varchar2(10),bb number)';
execute immediate str;

其中test是你要建立的表名,aa和bb是字段名,这个请用你自己的表名和字段名替换.

热心网友 时间:2022-04-11 10:54

我以前也这样写过,告诉你,存储过程里面只能放动态的sql,不能直接放create 这种东西的。估计truncate也是不能放的。
不管你是10g还是9i,都是不能的。

看我以前写的,以及人家的回答
http://zhidao.baidu.com/question/175832970.html

热心网友 时间:2022-04-11 13:02

str:= 'create table '||tname|| '('||c1||' char,'||c2||' char) ';
execute immediate str;
等同于
execute immediate( 'create table t_name ' || '(c1 char,c2 char)');

热心网友 时间:2022-04-11 15:27

||相当于连接字符串的意思!

热心网友 时间:2022-04-11 18:08

|| 是连接两个字符串的操作。

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com