注意事项
1.在oracle 中数据删除后还能回滚是因为它把原始数据放到了undo表空间,
2.DML语句使用undo表空间,DDL语句不使用undo, 而delete是DML语句,truncate是DDL语句,别外DDL语句是隐式提交.所以truncate操用不能回滚,而delete操作可以
truncate与delete相同点:
1 在oracle中删除表中的数据的方法有delete,truncate
2 它们都是删除表中的数据,而不能删除表结构.
truncate与delete之间的区别
1 delete 可删除整个表的数据也可删除表中某一条或N条满足条件的数据,删除的数据可恢复.命令完成就可回滾.
2 truncate只能删除整个表的数据,自動提交的.命令完成不可回滾.truncate的速度也比delete要快得多,truncate之后,TABLE的HWM退回到 INITIAL和NEXT的位置(默认)delete 则不可以.
4 truncate 只能对TABLE,delete 可以是table,view,synonym
5 TRUNCATE TABLE 的对象必须是本模式下的,或者有drop any table的权限 而 DELETE 则是对象必须是本模式下的,或被授予 DELETE ON SCHEMA.TABLE 或DELETE ANY TABLE的权限.
一 truncate
用法:
Sql代码
truncate table T;
二 delete
用法:
Sql代码
delete T
另外在加上一个重要区别
delete在plsql中是可执行的,但是truncate在plsql中不能执行,只能用动态sql执行,如下:
Sql代码
execute immediate 'truncate table 表名';
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
注意最后一点,前面因为不知道truncate是DDL语言,在PLSQL中用法,结果写过程时。
报错:
create or replace procedure proceName as
begin
truncate table TABLE_NAME;
……
end proceName;
可编译:
create or replace procedure proceName as
begin
execute immediate 'truncate table TABLE_NAME;
……
end proceName;