DDL锁表问题

转别人的。

原链接:http://blog.tianya.cn/blogger/post_show.asp?BlogID=625352&PostID=22754139&idWriter=0&Key=0

今天写存储过程,用到了动态sql。

  其中我是这样用的:
  EXECUTE IMMEDIATE 'truncate table en_pt_kw_aeffect_sumt0_mapping WHERE Status = ''DAY''' ;
  调试的时候报错了。
  错误:
  ora-03291:Invalid truncate option-missing STORAGE keyword
  ora-06512:at "ETL.PKG_TC_POWERTRACE",line 72
  ora-06512:at line 3
  
  原因:
  ddl操作不能加where
  要删除表的一部分数据,得用delete
  要删除表的一个分区的数据,可以用truncate
  alter table 表名 
  truncate partition 分区名;
  
  解决办法:
  那句换成:DELETE FROM en_pt_kw_aeffect_sumt0_mapping WHERE Status = 'DAY' ;
  
  补充说明:
  sql语句分两种:ddl和dml。
  在代码里,ddl需要用动态sql;dml不需要动态的。
  ddl就那几种:create drop truncate alter
  dml也就几种:insert update delete merge
  再有个select

你可能感兴趣的:(DDL锁表问题)