Оператор DELETE можно использовать для удаления одной, нескольких или всех строк таблицы:
Предложение WHERE в операторе DELETE является необязательным: если оно не задано, то удаляются все строки таблицы. Рассмотрим несколько примеров:
• Удаление всех книг из таблицы books:
• Удаление из таблицы books всех книг, которые были опубликованы до определенной даты, и возврат количества удаленных строк:
Конечно, при работе с реальными объектами все эти команды DML становятся существенно более сложными. Например, вы можете обновить несколько столбцов данными, полученными в результате выполнения подзапроса. Начиная с версии Oracle9/ Database можно заменить имя таблицы табличной функцией, возвращающей результирующее множество, с которым и будет работать оператор DML (см. также главу 3).
Oracle поддерживает ряд атрибутов курсора для неявных курсоров, стоящих за операторами DML, - они будут рассмотрены в следующем разделе.
Oracle позволяет получить доступ к информации о последней выполненной встроенной команде DML через атрибуты неявных курсоров SQL (они совпадают с атрибутами, перечисленными в табл. 1.6). Значения, возвращаемые данными атрибутами для операторов DML, представлены в табл. 1.8.
Таблица 1.8. Атрибуты неявных курсоров SQL для операторов DML
Имя
|
Описание
|
SQL%FOUND
|
|
SQL%NOTFOUND
|
|
SQL%ROWCOUNT
|
Возвращает количество строк, модифицированных командой DML.
|
• Используем атрибут SQL%FOUND для определения того, обработал ли наш оператор DML сколько-нибудь строк. Пусть, например, некоторый автор время от времени меняет свое имя и хочет, чтобы именно это новое имя использовалось во всех его книгах. Создаем маленькую процедуру, которая будет обновлять имя автора, а затем сообщать о том, были ли изменены какие-то строки, через логическую переменную:
• Используем атрибут SQL%ROWCOUNT в случае, когда необходимо определить точное количество строк, обработанных оператором DML. Переработаем приведенную выше процедуру изменения имени, с тем чтобы она возвращала чуть больше информации:
< Предыдущая | Следующая > |
---|