2014-10-10 44 views
-3
With TruncateCTE(Empid,Name) 
as 
(
select * 
from truncatetest 
where Empid=10 
) 
truncate table TruncateCTE 

但它显示一个错误:关键字“截断”附近如何使用截断的CTE

不正确的语法。 请帮我解决这个...

+1

你想做什么? – 2014-10-10 06:05:10

+0

你的问题没有任何意义。你正试图解决的**真正**问题是什么? – 2014-10-10 07:16:05

回答

2

基本上,TRUNCATE是一个DDL操作,这意味着除去该行的所有。您无法删除某些行并在表中留下其他行。

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

因此,您的查询毫无意义。

如果您正在寻找从表中删除一些行,那么DELETE是什么意思。但是,由于混合了子查询工厂和截断,整个问题是无效的。

+1

严格地说,你并没有在CTE内部使用DDL,而是在DDL内部使用CTE的结果 - 这是不同的。 – 2014-10-10 08:16:02

+0

这就是我说的,Oracle确实允许像CREATE ***这样的DDL使用子查询(CTE)***返回的结果集。如果这造成了混淆,我会删除测试用例。 – 2014-10-10 08:22:22

1

我觉得你只是想delete

delete from truncatetest 
    where Empid = 10; 

在大多数数据库中,热膨胀系数是简单的子查询,你不能使用子查询与truncate。坚持陈旧的老式delete声明。

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