如何在CTE中使用truncate

时间:2014-10-10 06:03:07

标签: sql oracle

With TruncateCTE(Empid,Name)
as
(
select *
from truncatetest
where Empid=10
)
truncate table TruncateCTE

但它显示错误:

关键字' truncate'附近的语法不正确。 请帮我解决这个问题......

2 个答案:

答案 0 :(得分:2)

基本上,TRUNCATE是DDL操作,这意味着删除行的 ALL 。您无法删除某些行,并在表格中留下其他行。

并且,WITH子句可以作为内联视图处理或解析为临时表。因此,截断它是没有意义的。

所以,你的查询完全没有意义。

如果您要从表中删除某些行,那么DELETE就是它的意思。但是,由于混合子查询工厂和截断,整个问题无效。

答案 1 :(得分:1)

我想你只想要delete

delete from truncatetest
    where Empid = 10;

在大多数数据库中,CTE只是子查询,您不能将子查询与truncate一起使用。坚持使用好的老式delete陈述。

请注意,Postgres确实允许CTE中的一些DDL语句(尽管不是我所知道的Oracle),但我仍然认为它不允许truncate