Oracle PL/SQL Вставка, обновление, удаление и выбор в [Пример]

⚡ Умное резюме

SQL-запросы внутри Oracle PL/SQL обрабатывает все задачи по манипулированию данными, позволяя блоку напрямую вставлять, обновлять, удалять и выбирать строки. Команды INSERT, UPDATE, DELETE и SELECT INTO перемещают и извлекают данные внутри базы данных.

  • ⚙️ Команды DML: Операторы INSERT, UPDATE, DELETE и SELECT INTO выполняют все операции по обработке данных внутри блока PL/SQL.
  • Вставка данных: Оператор INSERT INTO добавляет строки из заданных значений или напрямую из другой таблицы с помощью оператора SELECT.
  • 🔄 Обновление данных: Оператор UPDATE с оператором SET изменяет значения столбцов, а необязательный оператор WHERE ограничивает количество затрагиваемых строк.
  • 🇧🇷 Удаление данных: Оператор DELETE удаляет соответствующие записи, а отсутствие условия WHERE очищает всю таблицу.
  • 🎯 Выберите в: Запрос SELECT INTO должен возвращать ровно одну строку, или Oracle Вызывает ошибки типа NO_DATA_FOUND или TOO_MANY_ROWS.
  • 🤖 Помощь ИИ: Искусственный интеллект-помощники, такие как GitHub Copilot, создают черновики блоков DML и отмечают отсутствие операторов WHERE или COMMIT.

Oracle PL/SQL Insert Update Delete Select Into

DML-транзакции в PL/SQL

DML расшифровывается как Data Manipulation Language (язык манипулирования данными), группа языков манипулирования данными. SQL Команды, изменяющие данные, хранящиеся в таблице. Внутри Блок PL / SQLЭти команды выполняют манипуляции, а PL/SQL предоставляет окружающую логику. DML обрабатывает операции, описанные ниже.

  • Вставка данных
  • Обновление данных
  • Удаление данных
  • Выбор данных

В PL/SQL манипулирование данными осуществляется исключительно с помощью команд SQL.

Вставка данных

В PL/SQL строки добавляются в таблицу с помощью команды SQL INSERT INTO. Эта команда принимает в качестве входных данных имя таблицы, целевые столбцы и значения столбцов, а затем вставляет значение в базовую таблицу.

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

Синтаксис:

BEGIN
INSERT INTO <table_name>(<column1>,<column2>,...,<column_n>)
VALUES(<value1>,<value2>,...,<value_n>);
END;

Приведенный выше синтаксис демонстрирует команду INSERT INTO. Имя таблицы и значения являются обязательными полями, тогда как имена столбцов являются необязательными, если оператор INSERT предоставляет значения для каждого столбца таблицы. Ключевое слово VALUES является обязательным, если значения указываются отдельно, как показано выше.

Синтаксис:

BEGIN
INSERT INTO <table_name>(<column1>,<column2>,...,<column_n>)
SELECT <column1>,<column2>,...,<column_n> FROM <table_name2>;
END;

Вторая форма оператора INSERT INTO берет значения непосредственно из... Используя команду SELECT. Ключевое слово VALUES здесь не должно присутствовать, поскольку значения не указываются отдельно.

Обновление данных

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

Синтаксис:

BEGIN
UPDATE <table_name>
SET <column1>=<value1>,<column2>=<value2>,<column_n>=<value_n>
WHERE <condition that uniquely identifies the record that needs to be updated>;
END;

Приведенный выше синтаксис показывает оператор UPDATE. Ключевое слово SET указывает механизму PL/SQL обновить столбец заданным значением. Предложение WHERE является необязательным; если оно не указано, значение указанного столбца обновляется во всей таблице.

Удаление данных

Удаление данных означает удаление одной полной записи из таблицы базы данных. Для этой цели используется команда DELETE.

Синтаксис:

BEGIN
DELETE FROM <table_name>
WHERE <condition that uniquely identifies the record that needs to be deleted>;
END;

Приведенный выше синтаксис демонстрирует команду DELETE. Ключевое слово FROM является необязательным, и с предложением FROM или без него команда работает одинаково. Предложение WHERE является необязательным; если оно не указано, то вся таблица будет очищена.

Выбор данных

Проекция данных, или выборка, означает извлечение необходимых данных из таблицы базы данных. Это достигается с помощью команды SELECT вместе с предложением INTO. Команда SELECT извлекает значения из базы данных, а предложение INTO присваивает эти значения локальным переменным блока PL/SQL.

При использовании оператора SELECT с оператором INTO необходимо учитывать следующие моменты:

  • Оператор SELECT с использованием предложения INTO должен возвращать только одну запись, поскольку одна переменная может содержать только одно значение. Если оператор SELECT возвращает более одной строки, Исключение TOO_MANY_ROWS Поднялся.
  • Оператор SELECT присваивает значение переменной в предложении INTO, поэтому для заполнения значения требуется как минимум одна запись. Если запись не найдена, генерируется исключение NO_DATA_FOUND.
  • Количество столбцов и их типы данных в предложении SELECT должно соответствовать количеству переменных и их типам данных в предложении INTO.
  • Значения извлекаются и заполняются в том же порядке, как указано в операторе.
  • Условие WHERE является необязательным и позволяет устанавливать дополнительные ограничения на извлекаемые записи.
  • Оператор SELECT можно использовать в условии WHERE других операторов DML для определения значений условий.
  • Оператор SELECT, используемый внутри операторов INSERT, UPDATE или DELETE, не должен содержать предложение INTO, поскольку в этих случаях оно не заполняет никакие переменные.

Синтаксис:

BEGIN
SELECT <column1>,...,<column_n> INTO <variable1>,...,<variable_n>
FROM <table_name>
WHERE <condition to fetch the required records>;
END;

Приведенный выше синтаксис демонстрирует команду SELECT-INTO. Ключевое слово FROM является обязательным и указывает таблицу, из которой необходимо получить данные. Предложение WHERE является необязательным; если оно не указано, будут получены данные из всей таблицы.

Пример 1: В этом примере мы рассмотрим, как выполнять операции DML в PL/SQL. Мы вставим четыре записи, указанные ниже, в таблицу emp.

EMP_NAME ЭМП_НО ЗАРПЛАТА МЕНЕДЖЕР
BBB 1000 25000 AAA
XXX 1001 10000 BBB
YYY 1002 10000 BBB
ZZZ 1003 7500 BBB

Затем мы обновим зарплату сотрудника «XXX» до 15000, удалим запись о сотруднике «ZZZ» и, наконец, спроецируем данные о сотруднике «XXX».

На скриншоте ниже показан полный блок PL/SQL, использованный в этом примере.

Oracle Блок PL/SQL, выполняющий операции вставки, обновления, удаления и выбора данных в таблице emp.

DECLARE
l_emp_name VARCHAR2(250);
l_emp_no NUMBER;
l_salary NUMBER;
l_manager VARCHAR2(250);
BEGIN
INSERT INTO emp(emp_name,emp_no,salary,manager)
VALUES('BBB',1000,25000,'AAA');
INSERT INTO emp(emp_name,emp_no,salary,manager)
VALUES('XXX',1001,10000,'BBB');
INSERT INTO emp(emp_name,emp_no,salary,manager)
VALUES('YYY',1002,10000,'BBB');
INSERT INTO emp(emp_name,emp_no,salary,manager)
VALUES('ZZZ',1003,7500,'BBB');
COMMIT;
Dbms_output.put_line('Values Inserted');
UPDATE EMP
SET salary=15000
WHERE emp_name='XXX';
COMMIT;
Dbms_output.put_line('Values Updated');
DELETE emp WHERE emp_name='ZZZ';
COMMIT;
Dbms_output.put_line('Values Deleted');
SELECT emp_name,emp_no,salary,manager INTO l_emp_name,l_emp_no,l_salary,l_manager FROM emp WHERE emp_name='XXX';
Dbms_output.put_line('Employee Detail');
Dbms_output.put_line('Employee Name:'||l_emp_name);
Dbms_output.put_line('Employee Number:'||l_emp_no);
Dbms_output.put_line('Employee Salary:'||l_salary);
Dbms_output.put_line('Employee Manager Name:'||l_manager);
END;
/

Выход:

Values Inserted
Values Updated
Values Deleted
Employee Detail
Employee Name:XXX
Employee Number:1001
Employee Salary:15000
Employee Manager Name:BBB

Code Объяснение:

  • Code строки 2-5: Объявление переменных.
  • Code строки 7-14: Вставка записей в таблицу сотрудников.
  • Code строка 15: Подтверждение транзакций вставки.
  • Code строки 17-19: Обновление заработной платы сотрудника 'XXX' до 15000.
  • Code строка 20: Подтверждение транзакции обновления.
  • Code строка 22: Удаление записи типа 'ZZZ'.
  • Code строка 23: Подтверждение транзакции удаления.
  • Code строка 25: Выбираем запись с именем 'XXX' и заполняем переменные l_emp_name, l_emp_no, l_salary и l_manager.
  • Code строки 26-30: Отображение значений полученных записей.

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

Нет. Статический PL/SQL не может напрямую выполнять DDL-операции. Сформируйте оператор как строку и выполните его с помощью... ВЫПОЛНИТЬ НЕМЕДЛЕННОкоторый обрабатывает команды CREATE, ALTER и DROP во время выполнения.

Оператор SELECT INTO должен возвращать ровно одну строку. Для чтения большого количества строк используйте явное указание источника. курсор с помощью цикла FETCH или BULK COLLECT INTO a collection.

DELETE — это операция DML: она удаляет выбранные строки с условием WHERE и может быть отменена. TRUNCATE — это операция DDL: она мгновенно очищает все строки, автоматически фиксирует изменения и не может быть отменена.

Да. Изменения, внесенные с помощью функций INSERT, UPDATE и DELETE, сохраняются в вашей сессии до тех пор, пока вы их не удалите. COMMITPL/SQL не поддерживает автоматическую фиксацию изменений. Используйте COMMIT для сохранения или ROLLBACK для отмены.

Оператор MERGE выполняет операцию upsert — обновляет строки, соответствующие условию объединения, и вставляет те, которые ему не соответствуют, — в одном операторе, а не в отдельных проходах UPDATE и INSERT.

Оператор RETURNING INTO захватывает значения столбцов из строк, которые только что были затронуты операциями INSERT, UPDATE или DELETE, и сохраняет их в переменных, избегая дополнительного оператора SELECT для чтения измененных данных.

Да. Второй пилот GitHub Функция создает черновики блоков INSERT, UPDATE, DELETE и SELECT INTO на основе короткого комментария, предлагает переменные для привязки и дополняет списки столбцов, хотя сначала следует ознакомиться с логикой.

Искусственный интеллект-помощники сканируют DML-операции на наличие отсутствующих операторов WHERE, отсутствующих COMMIT-сообщений и небезопасной конкатенации, а затем предлагают исправления и объясняют ошибки. Этот анализ с помощью машинного обучения выявляет рискованные изменения до того, как они попадут в продакшн.

Подведем итог этой публикации следующим образом: