Oracle PL/SQL Вставка, обновление, удаление и выбор в [Пример]
⚡ Умное резюме
SQL-запросы внутри 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, использованный в этом примере.
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: Отображение значений полученных записей.

