Шаг 46 - PL/SQL - DML, оператор INSERT

Итак, приступим к более детальному разбору операторов DML. Без применения этих операторов было бы вообще бессмысленна вся эта затея с серверами БД. Начать лучше всего с оператора DML - INSERT. Оператор INSERT, служит для заполнения таблиц БД данными и является достаточно простым в использовании. Давайте посмотрим, на синтаксис оператора INSERT:

---------------- INSERT INTO --- таблица ---------------------------------------------------
-------------------------------- (имя столбца таблицы) -------------------------------------
--------------------------------------- , --------------------------------------------------
----------------------- VALUES --- (выражение); --------------------------------------------
----------------------- оператор выбора         --------------------------------------------

Я думаю, понятно, что "таблица" - это имя таблицы, куда вводятся данные. "имя столбца" - это список столбцов, в которые вводятся данные. "Выражение" - это собственно сами данные. "Оператор выбора" - это предложение SELECT, для заполнения таблицы. Используется без части VALUES. Давайте удалим все таблицы, которые вы создавали в прошлый раз, так как сейчас мы будем рассматривать их новый вариант. Удалять таблицы вы уже умеете. Если вы не сделали этого в прошлый раз то просто введите:

DROP TABLE PEOPLE
/

DROP TABLE NEWPEOPLE
/

COMMIT
/

Затем создаем таблицу PEOPLE с новыми параметрами:

CREATE TABLE PEOPLE
(
	ID NUMBER PRIMARY KEY,     
	NM VARCHAR2(50), 
	FM VARCHAR2(50),
	OT VARCHAR2(50)
)
/

COMMIT
/

Получаем:

SQL> CREATE TABLE PEOPLE
  2  (
  3   ID NUMBER PRIMARY KEY,
  4   NM VARCHAR2(50),
  5   FM VARCHAR2(50),
  6   OT VARCHAR2(50)
  7  )
  8  /

Таблица создана.

SQL> COMMIT
  2  /

Фиксация обновлений завершена.

Обратите внимание на поле ID таблицы PEOPLE! Оно имеет атрибут PRIMARY KEY, то есть является первичным ключом таблицы. В него можно записывать только отличные друг от друга значения. И это поле не принимает значения типа NULL! Теперь, применив оператор INSERT, согласно его синтаксического разбора введем в таблицу шесть значений:

INSERT INTO PEOPLE(ID, NM, FM, OT)
			VALUES(1, 'John', 'Godwin', 'Petrovich')
/

INSERT INTO PEOPLE(ID, NM, FM, OT)
			VALUES(2, 'Bob', 'Doris', 'Martovich')
/

INSERT INTO PEOPLE(ID, NM, FM, OT)
			VALUES(3, 'Frank', 'Black', 'Milleniumich')
/

INSERT INTO PEOPLE(ID, NM, FM, OT)
			VALUES(4, 'Pupkin', 'Misha', 'Semenovich')
/

INSERT INTO PEOPLE(ID, NM, FM, OT)
			VALUES(5, 'Pistoletov', 'Makar', 'Patronovich')
/

INSERT INTO PEOPLE(ID, NM, FM, OT)
			VALUES(6, 'Avtomatov', 'Kolya', 'Pricelovich')
/


COMMIT
/

Получаем:

SQL> INSERT INTO PEOPLE(ID, NM, FM, OT)
  2     VALUES(1, 'John', 'Godwin', 'Petrovich')
  3  /

1 строка создана.

SQL> INSERT INTO PEOPLE(ID, NM, FM, OT)
  2     VALUES(2, 'Bob', 'Doris', 'Martovich')
  3  /

1 строка создана.

SQL> INSERT INTO PEOPLE(ID, NM, FM, OT)
  2     VALUES(3, 'Frank', 'Black', 'Milleniumich')
  3  /

1 строка создана.

SQL> INSERT INTO PEOPLE(ID, NM, FM, OT)
  2     VALUES(4, 'Pupkin', 'Misha', 'Semenovich')
  3  /

1 строка создана.

SQL> INSERT INTO PEOPLE(ID, NM, FM, OT)
  2     VALUES(5, 'Pistoletov', 'Makar', 'Patronovich')
  3  /

1 строка создана.

SQL> INSERT INTO PEOPLE(ID, NM, FM, OT)
  2     VALUES(6, 'Avtomatov', 'Kolya', 'Pricelovich')
  3  /

1 строка создана.

SQL> COMMIT
  2  /

Фиксация обновлений завершена.

В части INTO PEOPLE(ID, NM, FM, OT) оператора INSERT указаны поля в порядке ввода данных, если есть необходимость порядок следования полей можно изменить или вообще исключить некоторые из них. В части VALUES(6, 'Avtomatov', 'Kolya', 'Pricelovich') оператора INSERT указаны собственно данные для ввода. Вот так работает оператор INSERT.

Я думаю, ничего сложного в этом нет. В результате таблица PEOPLE получила шесть записей. А что, если у вас есть данные, которые быстро нужно загрузить не путая с тем, что уже было в таблице. Для этого можно применить оператор INSERT с выражением SELECT. Создадим промежуточную таблицу и перебросим содержимое основной в нее:

CREATE TABLE OLD_PEOPLE
(
	ID NUMBER PRIMARY KEY,     
	NM VARCHAR2(50), 
	FM VARCHAR2(50),
	OT VARCHAR2(50)
)
/

COMMIT
/

Получаем: SQL> CREATE TABLE OLD_PEOPLE 2 ( 3 ID NUMBER PRIMARY KEY, 4 NM VARCHAR2(50), 5 FM VARCHAR2(50), 6 OT VARCHAR2(50) 7 ) 8 / Таблица создана. SQL> COMMIT 2 / Фиксация обновлений завершена.

Теперь применяя INSERT с выражением, перегрузим данные в новую таблицу:

INSERT INTO OLD_PEOPLE
	SELECT * FROM PEOPLE	
/

Получаем:

SQL> INSERT INTO OLD_PEOPLE
  2   SELECT * FROM PEOPLE
  3  /

6 строк создано.

SQL> COMMIT
  2  /

Фиксация обновлений завершена.

Теперь в обеих таблицах одинаковые данные. Вот таким образом можно, применяя оператор SELECT со всей его мощью, получать результаты разнообразных запросов. Но при этом количество, имена и типы данных обеих таблиц должны быть одинаковы!!! Например, таким оператором я часто пользуюсь при сливании таблиц телефонных номеров. Очень удобно. Таким образом, мы рассмотрели первый из трех основных операторов, DML - INSERT. Пока не удаляйте таблицы PEOPLE и OLD_PEOPLE, в следующем шаге они нам еще понадобятся. Пока можете поработать с тем материалом, который рассмотрели сейчас.


Предыдущий Шаг | Следующий Шаг | Оглавление
Автор Летучий Сергей - 21.10.2003