Oracle PL/SQL Insert, Update, Delete & Select Into [Приклад]

У цьому підручнику ми навчимося використовувати SQL в PL/SQL. SQL є фактичним компонентом, який піклується про вибірку та оновлення даних у базі даних, тоді як PL/SQL є компонентом, який обробляє ці дані. Далі в цій статті ми також обговоримо, як поєднати SQL у блоці PL/SQL.

Транзакції DML у PL/SQL

DML означає Мова маніпулювання даними. Ці твердження в основному використовуються для здійснення маніпуляційної діяльності. Він стосується наведених нижче операцій.

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

У PL/SQL ми можемо маніпулювати даними лише за допомогою команд SQL.

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

У PL/SQL ми можемо вставити дані в будь-яку таблицю за допомогою команди SQL INSERT INTO. Ця команда візьме назву таблиці, стовпець таблиці та значення стовпця як вхідні дані та вставить значення в базову таблицю.

Команда INSERT також може брати значення безпосередньо з іншої таблиці за допомогою оператора «SELECT», а не вказувати значення для кожного стовпця. За допомогою оператора «SELECT» ми можемо вставити стільки рядків, скільки містить базова таблиця.

Синтаксис:

BEGIN
  INSERT INTO <table_name>(<column1 >,<column2>,...<column_n>)
     VALUES(<valuel><value2>,...:<value_n>);
END;
  • Наведений вище синтаксис показує команду INSERT INTO. Ім’я та значення таблиці є обов’язковими полями, тоді як імена стовпців не є обов’язковими, якщо оператори вставки містять значення для всіх стовпців таблиці.
  • Ключове слово 'VALUES' є обов'язковим, якщо значення надаються окремо, як показано вище.

Синтаксис:

BEGIN
  INSERT INTO <table_name>(<columnl>,<column2>,...,<column_n>)
     SELECT <columnl>,<column2>,.. <column_n> FROM <table_name2>;
END;
  • Наведений вище синтаксис показує команду INSERT INTO, яка приймає значення безпосередньо з за допомогою команди SELECT.
  • У цьому випадку ключове слово "VALUES" не повинно бути присутнім, оскільки значення не надаються окремо.

Оновлення даних

Оновлення даних просто означає оновлення значення будь-якого стовпця в таблиці. Це можна зробити за допомогою оператора 'UPDATE'. Цей оператор приймає назву таблиці, назву стовпця та значення як вхідні дані та оновлює дані.

Синтаксис:

BEGIN	
  UPDATE <table_name>
  SET <columnl>=<VALUE1>,<column2>=<value2>,<column_n>=<value_n> 
  WHERE <condition that uniquely identifies the record that needs to be update>; 
END;
  • Наведений вище синтаксис показує ОНОВЛЕННЯ. Ключове слово "SET" наказує механізму PL/SQL оновити значення стовпця на задане значення.
  • Речення WHERE необов'язкове. Якщо цей пункт не вказано, значення згаданого стовпця у всій таблиці буде оновлено.

Видалення даних

Видалення даних означає видалення одного повного запису з таблиці бази даних. Для цього використовується команда «DELETE».

Синтаксис:

BEGIN
  DELETE
  FROM
  <table_name>
  WHERE <condition that uniquely identifies the record that needs to be update>; 
END;
  • Наведений вище синтаксис показує команду DELETE. Ключове слово "FROM" є необов'язковим, і з пропозицією "FROM" або без нього команда поводиться так само.
  • Речення WHERE необов'язкове. Якщо цей пункт не вказано, то всю таблицю буде видалено.

Вибір даних

Проекція/вибірка даних означає отримання необхідних даних із таблиці бази даних. Цього можна досягти за допомогою команди 'SELECT' з пунктом 'INTO'. Команда 'SELECT' отримає значення з бази даних, а пункт 'INTO' призначить ці значення локальній змінній Блок PL/SQL.

Нижче наведено моменти, які потрібно враховувати в операторі «SELECT».

  • Інструкція SELECT має повертати лише один запис під час використання пропозиції INTO, оскільки одна змінна може містити лише одне значення. Якщо оператор «SELECT» повертає більше одного значення, буде створено виняток «TOO_MANY_ROWS».
  • Оператор SELECT призначає значення змінній у реченні INTO, тому для заповнення значення потрібно отримати принаймні один запис із таблиці. Якщо він не отримав жодного запису, то виникає виняток "NO_DATA_FOUND".
  • Кількість стовпців і їхні типи даних у реченні «SELECT» мають збігатися з кількістю змінних і їхніх типів даних у реченні «INTO».
  • Значення вибираються та заповнюються в такому самому порядку, як зазначено в заяві.
  • Речення 'WHERE' є необов'язковим, що дозволяє мати більше обмежень щодо записів, які збираються отримати.
  • Оператор «SELECT» можна використовувати в умові «WHERE» інших операторів DML для визначення значень умов.
  • Оператор «SELECT» під час використання операторів «INSERT», «UPDATE», «DELETE» не повинен мати пункт «INTO», оскільки в цих випадках він не заповнює жодну змінну.

Синтаксис:

BEGIN
  SELECT <columnl>,..<column_n> INTO <vanable 1 >,. .<variable_n> 
   FROM <table_name>
   WHERE <condition to fetch the required records>;
END;
  • Наведений вище синтаксис показує команду SELECT-INTO. Ключове слово «FROM» є обов’язковим для визначення імені таблиці, з якої потрібно отримати дані.
  • Речення WHERE необов'язкове. Якщо цей пункт не вказано, дані з усієї таблиці будуть отримані.

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

EMP_NAME EMP_NO СЛУЖБА МЕНЕДЖЕР
BBB 1000 25000 AAA
XXX 1001 10000 BBB
РРР 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,managed 
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(‘Emplovee 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

Пояснення коду:

  • Рядок коду 2-5: Оголошення змінної.
  • Рядок коду 7-14: вставлення записів у таблицю emp.
  • Рядок коду 15: фіксація транзакцій вставки.
  • Рядок коду 17-19: Оновлення зарплати працівника «XXX» до 15000
  • Рядок коду 20: фіксація транзакції оновлення.
  • Рядок коду 22: Видалення запису "ZZZ"
  • Рядок коду 23: фіксація транзакції видалення.
  • Рядок коду 25-27: Вибір запису «XXX» і заповнення змінної l_emp_name, l_emp_no, l_salary, l_manager.
  • Рядок коду 28-32: Відображення отриманого значення запису.