发布网友 发布时间: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
|| 是连接两个字符串的操作。