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

Но он показывает ошибку:как использовать TRUNCATE в КТР

Неправильный синтаксис около ключевого слова «укоротить». Пожалуйста, помогите мне решить эту проблему ...

+1

что вы пытаетесь сделать? –

+0

Ваш вопрос не имеет никакого смысла. Какую ** настоящую ** проблему вы пытаетесь решить? –

ответ

2

В принципе, TRUNCATE это операция DDL, а это значит, удалить ВСЕ строк. Вы не можете удалить НЕКОТОРЫЕ строк и оставить другие строки в таблице.

И, пункт WITH может быть обработан как встроенный просмотр или разрешен как временная таблица. Таким образом, нет смысла обрезать его.

Итак, ваш запрос не имеет никакого смысла.

Если вы хотите удалить некоторые строки из таблицы, то DELETE предназначен для этого. Но, поскольку у вас смешанная фабрика подзапросов и усечение, весь вопрос недействителен.

+1

Строго говоря, вы не используете DDL внутри CTE, вы используете (результат) CTE внутри DDL - что-то другое. –

+0

Вот что я сказал, Oracle делает DDL, например CREATE ***, с помощью набора результатов, возвращаемого подзапросом (CTE) ***. Если это создало путаницу, я бы удалил тестовый пример. –

1

Я думаю, что вы просто хотите delete:

delete from truncatetest 
    where Empid = 10; 

В большинстве баз данных, CTE просто подзапросы, и вы не можете использовать подзапрос с truncate. Stick с хорошим старомодным заявлением delete.

Обратите внимание, что Postgres разрешает некоторые заявления DDL в CTE (хотя и не Oracle, насколько я знаю), но я до сих пор не думаю, что он разрешает truncate.

Смежные вопросы