Удалить строку Oracle sql

Обновлено: 01.07.2024

В этом учебном пособии Oracle объясняется, как использовать оператор Oracle DELETE с синтаксисом, примерами и практическими упражнениями.

Описание

Инструкция Oracle DELETE используется для удаления одной или нескольких записей из таблицы в Oracle.

Синтаксис

Синтаксис инструкции DELETE в Oracle/PLSQL:

Параметры или аргументы

table Таблица, из которой вы хотите удалить записи. ГДЕ условия Необязательный. Условия, которые должны быть соблюдены, чтобы записи были удалены. Если условия не указаны, то все записи из таблицы будут удалены.

  • Вам не нужно перечислять поля в операторе Oracle DELETE, так как вы удаляете всю строку из таблицы.

Пример — использование одного условия

Давайте рассмотрим пример простого запроса Oracle DELETE, в котором у нас есть только одно условие в операторе DELETE.

В этом примере Oracle DELETE будут удалены все записи из таблицы customers, где last_name — Smith.

Вы можете проверить количество строк, которые будут удалены. Вы можете определить количество строк, которые будут удалены, выполнив следующую инструкцию Oracle SELECT перед выполнением удаления.

Пример — использование двух условий

Давайте рассмотрим пример Oracle DELETE, где у нас всего два условия в операторе DELETE.

В этом примере Oracle DELETE будут удалены все записи из таблицы customers, где last_name — "Андерсон", а customer_id больше 25. .

Вы можете проверить количество строк, которые будут удалены. Вы можете определить количество строк, которые будут удалены, выполнив следующую инструкцию Oracle SELECT перед выполнением удаления.

Пример — использование предложения EXISTS

Вы также можете выполнять более сложные операции удаления.

Возможно, вы захотите удалить записи в одной таблице на основе значений в другой таблице. Поскольку вы не можете указать более одной таблицы в предложении Oracle FROM при выполнении удаления, вы можете использовать предложение Oracle EXISTS.

В этом примере Oracle DELETE будут удалены все записи в таблице suppliers, где есть запись в таблице customers, чей customer_id больше 25, а customer_id соответствует supplier_id.

Если вы хотите определить количество строк, которые будут удалены, вы можете запустить следующую инструкцию Oracle SELECT перед выполнением удаления.

Часто задаваемые вопросы

Вопрос: как мне написать инструкцию Oracle DELETE для удаления всех записей в таблице A, чьи данные в полях field1 и field2 НЕ соответствуют данным в fieldx и fieldz таблицы B?

Ответ: Вы можете попробовать что-то подобное для своего оператора Oracle DELETE:

На основании таблицы contacts удалите все записи из таблицы contacts, которые проживают в городе «Лас-Вегас» и чье first_name это Джейн.

Следующая инструкция Oracle DELETE удалит эти записи из таблицы contacts:

На основе таблицы contacts удалить все записи из таблицы contacts, чей contact_id больше или равен 5000 и меньше 6000 .

Следующая инструкция Oracle DELETE удалит эти записи из таблицы contacts:

Инструкция DELETE удаляет целые строки данных из указанной таблицы или представления. Полное описание инструкции DELETE см. в справочнике по Oracle Database SQL.

Синтаксис

Описание ключевого слова и параметра

Другое (обычно короткое) имя таблицы или представления, на которые указывает ссылка. Обычно упоминается позже в предложении WHERE.


ОПТОВЫЙ СБОР

Возвращает столбцы из удаленных строк в коллекции PL/SQL, как указано в списке RETURNING INTO. В соответствующих столбцах должны храниться скалярные (не составные) значения. Дополнительные сведения см. в разделе "Уменьшение циклических издержек для инструкций и запросов DML (FORALL, BULK COLLECT)".


return_clause

Возвращает значения из удаленных строк, избавляя от необходимости сначала ВЫБИРАТЬ строки. Вы можете извлечь значения столбца в отдельные переменные или в коллекции. Вы не можете использовать предложение RETURNING для удаленного или параллельного удаления. Если оператор не влияет ни на какие строки, значения переменных, указанных в предложении RETURNING, не определены.


подзапрос

Инструкция SELECT, предоставляющая набор строк для обработки. Его синтаксис похож на оператор select_into_statement без предложения INTO. См. «Выражение SELECT INTO».


table_reference

Таблица или представление, которые должны быть доступны при выполнении оператора DELETE и для которых у вас должны быть права DELETE.


ТАБЛИЦА (подзапрос2)

Операндом TABLE является оператор SELECT, который возвращает значение одного столбца, который должен быть вложенной таблицей. Оператор TABLE сообщает Oracle, что значение является коллекцией, а не скалярным значением.


ГДЕ ТЕКУЩЕЕ имя_курсора

Относится к последней строке, обработанной оператором FETCH, связанным с курсором, идентифицированным с помощью cursor_name . Курсор должен быть FOR UPDATE и должен быть открыт и расположен в строке. Если курсор не открыт, предложение CURRENT OF вызывает ошибку.

Если курсор открыт, но строки не были выбраны или последняя выборка не вернула строк, PL/SQL вызывает предопределенное исключение NO_DATA_FOUND .


ГДЕ search_condition

Условно выбирает строки для удаления из указанной таблицы или представления. Удаляются только строки, соответствующие условию поиска. Если вы опустите предложение WHERE, все строки в таблице или представлении будут удалены.

Примечания по использованию

Вы можете использовать оператор DELETE WHERE CURRENT OF после выборки из открытого курсора (включая неявные выборки, выполняемые в цикле FOR курсора), при условии, что связан запрос FOR UPDATE . Этот оператор удаляет текущую строку; то есть тот, который только что получен.

Неявный SQL курсора и атрибуты курсора %NOTFOUND , %FOUND и %ROWCOUNT позволяют получить доступ к полезной информации о выполнении оператора DELETE.

Примеры

Следующий оператор удаляет строки, соответствующие условию:

Следующий оператор возвращает два значения столбца из удаленной строки в локальные переменные:

Вы можете комбинировать предложение BULK COLLECT с оператором FORALL, и в этом случае механизм SQL выполняет массовое связывание значений столбцов постепенно. В следующем примере, если коллекция depts имеет 3 элемента, каждый из которых приводит к удалению 5 строк, то коллекция enums будет иметь 15 элементов после завершения оператора:

Значения столбца, возвращаемые каждым выполнением, добавляются к ранее возвращенным значениям.

Вывод: в этом руководстве вы узнаете, как использовать оператор Oracle DELETE для удаления одной или нескольких строк из таблицы.

Чтобы удалить одну или несколько строк из таблицы, используйте оператор Oracle DELETE следующим образом:

В этом заявлении

  • Сначала вы указываете имя таблицы, из которой хотите удалить данные.
  • Во-вторых, вы указываете, какую строку следует удалить, используя условие в предложении WHERE. Если вы опустите предложение WHERE, оператор Oracle DELETE удалит все строки из таблицы.

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

Примеры DELETE в Oracle

Давайте создадим новую таблицу с именем sales , содержащую все данные о заказах на продажу, для демонстрационных целей:

Этот оператор создал таблицу продаж и скопировал данные из таблиц orders и order_items в образце базы данных в таблицу продаж.

A) Oracle DELETE — удалить одну строку из таблицы

Следующий оператор удаляет строку, идентификатор заказа которой равен 1, а идентификатор элемента равен 1:

Oracle вернул следующее сообщение:

B) Oracle DELETE — удалить несколько строк из таблицы

Следующий оператор удаляет все строки, идентификатор заказа которых равен 1:

И Oracle вернул следующее сообщение:

C) Oracle DELETE — удалить все строки из таблицы

В следующем примере удаляются все строки из таблицы продаж:

И мы удалили 625 строк.

D) Oracle DELETE — каскадное удаление

На практике вы часто удаляете строку из таблицы, которая имеет отношение внешнего ключа к строкам из других таблиц.

Например, вы хотите удалить заказ на продажу с идентификатором 1 из таблицы заказов, а также удалить все позиции, связанные с идентификатором заказа 1, из таблицы order_items. Как правило, вы можете думать о двух операторах DELETE следующим образом:

Обратите внимание, что оператор COMMIT WORK обеспечивает выполнение обоих операторов DELETE по принципу «все или ничего», что предотвращает появление потерянных строк в таблице order_items в случае сбоя второго оператора DELETE.

Однако в этом нет необходимости, если вы знаете, как правильно настроить ограничение таблицы.

В этом случае при создании таблицы order_items вы определяете ограничение внешнего ключа с параметром DELETE CASCADE следующим образом:

Поступая таким образом, всякий раз, когда вы удаляете строку из таблицы заказов, например:

Все строки, идентификатор заказа которых равен 1 в таблице order_items, также автоматически удаляются системой базы данных.

В этом руководстве вы узнали, как использовать оператор Oracle DELETE для удаления строк из таблицы.

Полный руководство по удалению из таблицы в Oracle

Удалить из таблицы используется в Oracle Sql для удаления строк в таблице.Это оператор DML (язык манипулирования данными). Он используется для удаления подмножества существующих строк или всех существующих строк из таблицы.

Вот синтаксис удаления в Oracle

Здесь таблица – это имя таблицы, а условие – строки, которые необходимо удалить. Она состоит из столбцов, подзапросов и выражений

Важные моменты.

  • Операция удаления требует блокировки таблицы
  • Нам нужно сделать фиксацию, чтобы навсегда изменить дату (коммит;)
  • Мы можем использовать команду rollback для отмены изменений оператора удаления ( rollback;)
  • если определены триггеры удаления, они будут срабатывать для каждой удаленной строки
  • если вы хотите узнать, сколько строк будет удалено из оператора удаления, вы можете сначала запустить оператор select с тем же предложением where, чтобы узнать количество строк

Давайте рассмотрим несколько способов использования инструкции DELETE

Оглавление

УДАЛИТЬ определенные строки из таблицы или Как удалить запись из Oracle

Предположим, мы хотим удалить строки, в которых имя столбца = 'ДЖОН'

Предположим, мы хотим удалить отдел из таблицы отделов

Эти операторы удалят все строки, содержащие конкретное значение столбца. После завершения оператора удаления он покажет, сколько строк удалено. нам нужно сделать коммит, чтобы навсегда внести изменения.

Если строки не удалены, отображается 0 удаленных строк.

УДАЛИТЬ ВСЕ строки из таблицы в Oracle или Как удалить все записи из таблицы

Предположим, что мы хотим удалить все строки из примера таблицы, тогда выражение будет таким:

Он удалит все строки из таблицы оракула и напечатает количество удаленных строк, что на самом деле является счетчиком таблицы.

Это не сбрасывает максимальную отметку таблицы. и он использует отмену. Возможно, вы захотите использовать команду Truncate table в примере команды Oracle, которая сбрасывает HWM (верхняя отметка) и делает гораздо меньше отмен, чем оператор удаления

УДАЛИТЬ строки из таблицы на основе подзапроса в Oracle

Инструкцию Delete можно использовать с подзапросом для удаления строк

Предположим, что мы хотим удалить строки в Emp на основе имени отдела в таблице отделов, тогда оператор удаления будет похож на

Приведенный выше оператор сначала ищет dept_id в таблице отделов, где dept_name — это продажи. а затем он передает dept_id оператору удаления для таблицы emp

УДАЛИТЬ строки из таблицы с помощью предложения EXISTS/NOT EXISTS

Это еще одна форма удаления с использованием только подзапроса. Это используется, когда вы хотите сравнить две таблицы, чтобы удалить данные

Предположим, вы хотите удалить записи из таблицы отдела, где нет сотрудника

Ошибка ограничения целостности с оператором Delete

Если вы удаляете строки из таблицы, на которую ссылается внешний ключ другой таблицы, вы получите ошибки ограничения целостности

Давайте рассмотрим пример

Этого можно избежать, если мы укажем опцию каскадного удаления при создании таблицы EMP. Затем при удалении всех строк отдела удаляются и все записи из EMP

Статьи по теме
Изменение таблицы в Oracle: Изменить таблицу в оракуле используется для изменения столбца, удаления и добавления ограничений, изменения типа данных столбца таблицы, изменения параметров хранения таблицы
Создание глобальной Временная таблица в Oracle
Инструкция обновления в оракуле. Мы используем оператор обновления в оракуле для изменения существующих строк в таблице оракула в базе данных оракула. Обновление можно выполнить несколькими способами
DROP TABLE ORACLE: узнайте об удалении таблицы в Oracle, удалении таблицы, если она существует в Oracle, удалении нескольких таблиц одной командой, удалении каскадных ограничений таблицы
Oracle Create table: Tables являются основной единицей хранения данных в базе данных Oracle. мы расскажем, как использовать команду Oracle create table для создания таблицы с внешним ключом/первичным ключом
Документация Oracle по удалению

Читайте также: