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

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

但是如果这么做了,编译的时候会报错。
错误:PLS-00103: 出现符号 "CREATE"在需要下列之一时:
begin case declare end
exception exit for goto if loop mod null pragma raise return
select update while with <an identifier>
<a double-quoted delimited-identifier> <a bind variable> <<
close current delete fetch lock insert open rollback
savepoint set sql execute commit forall merge pipe
行:12
文本:create table temp as select * from EMR_COURSERECORD_LOGO;

commit;
end ttt;

如果把create那个注释掉,truncate也会报错。不知道是为什么。

我用的是oracle 10g。是不是不能在存储过程中加create和truncate呢?大家帮我看看什么问题啊?
我还用execute immediate试了一下,虽然编译通过,但是execute immediate里面的东西是不能运行的。
不需要大家粘贴复制一大堆东西,只需要大家复制到自己的PL/SQL看看,希望能得到完美答复,谢了大家。
谢谢ysyhyt和badkano,我觉得ysyhyt回答应该是对的,不能加动态SQL。
但是问题又来了,你能帮我修改一下我要写的存储过程吗?
因为str:= 'create table '||tname|| '('||c1||' char,'||c2||' char) ';
execute immediate str;
我有点看不懂啊,||是什么意思啊?
展开
 我来答
声幼烧521
2012-09-11
知道答主
回答量:4
采纳率:0%
帮助的人:7068
展开全部
||相当于连接字符串的意思!
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
chogo
2010-08-24 · 超过16用户采纳过TA的回答
知道答主
回答量:50
采纳率:0%
帮助的人:0
展开全部
|| 是连接两个字符串的操作。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式