встроенный запрос - PullRequest
       14

встроенный запрос

1 голос
/ 28 января 2012

Я хотел удалить некоторые записи, которые я недавно добавил, из этой таблицы mytemp, пожалуйста, скажите мне, что не так с этим запросом, данные в выбранном столбце были заполнены с помощью курсора

DELETE FROM (SELECT ROWNUM RM, S from mytemp) where rm > 20;

ошибка:

ORA-01732: операция с данными недопустима в этом представлении

Ответы [ 2 ]

2 голосов
/ 28 января 2012

Отредактировано для точности ...

Вот описание ошибки, которую вы получаете:

http://ora -01732.ora-code.com /

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

Таким образом, похоже, что обновляемое представление можно заменить таблицей, если оно не объединяет более одной таблицы или не использует виртуальные столбцы. В вашем случае проблема заключается в виртуальном столбце ROWNUM.

1 голос
/ 28 января 2012

Это утверждение rownum>20.

ROWNUM> x, где значения x больше положительного целого числа всегда ложны.

select * from ANYTABLE where rownum>(ANY POSITIVE INTEGER) 

не возвращает ни одной записи.

Первой выбранной строке присваивается ROWNUM, равный 1, и условие становится ложным. Вторая извлекаемая строка теперь является первой строкой, ей также присваивается ROWNUM, равный 1, и условие становится ложным. Впоследствии все строки не удовлетворяют условию, поэтому строки не возвращаются.

Проверьте ЭТО для получения дополнительной информации.

Вы можете сделать следующее:

delete from (select amount from TABLE t where t.amount=1000)

но это так же, как

delete from TABLE where amount=1000
...