With TruncateCTE(Empid,Name)
as
(
select *
from truncatetest
where Empid=10
)
truncate table TruncateCTE
但它显示一个错误:关键字“截断”附近如何使用截断的CTE
不正确的语法。 请帮我解决这个...
With TruncateCTE(Empid,Name)
as
(
select *
from truncatetest
where Empid=10
)
truncate table TruncateCTE
但它显示一个错误:关键字“截断”附近如何使用截断的CTE
不正确的语法。 请帮我解决这个...
基本上,TRUNCATE
是一个DDL操作,这意味着除去该行的所有。您无法删除某些行并在表中留下其他行。
而且,WITH
子句可以作为内联视图处理或者解析为临时表。所以,截断它是没有意义的。
因此,您的查询毫无意义。
如果您正在寻找从表中删除一些行,那么DELETE
是什么意思。但是,由于混合了子查询工厂和截断,整个问题是无效的。
严格地说,你并没有在CTE内部使用DDL,而是在DDL内部使用CTE的结果 - 这是不同的。 – 2014-10-10 08:16:02
这就是我说的,Oracle确实允许像CREATE ***这样的DDL使用子查询(CTE)***返回的结果集。如果这造成了混淆,我会删除测试用例。 – 2014-10-10 08:22:22
我觉得你只是想delete
:
delete from truncatetest
where Empid = 10;
在大多数数据库中,热膨胀系数是简单的子查询,你不能使用子查询与truncate
。坚持陈旧的老式delete
声明。
请注意,Postgres确实允许CTE中的一些DDL语句(尽管不是Oracle据我所知),但我仍然不认为它允许truncate
。
你想做什么? – 2014-10-10 06:05:10
你的问题没有任何意义。你正试图解决的**真正**问题是什么? – 2014-10-10 07:16:05