■ таблицу, в которую следует вставить строку,
■ список столбцов, для которых вы хотите указать значения,
■ список значений, которые будут сохранены в соответствующих
столбцах.
При вставке строки необходимо обязательно предоставить значения
для первичного ключа и для всех столбцов, объявленных как NOT NULL.
Введение 21
При желании можно не предоставлять значения для всех остальных
столбцов - в результате все такие столбцы будут автоматически установлены
на NULL.
Всегда можно узнать, какие именно столбцы были при создании таблицы
определены как NOT NULL, используя для этого команду SQI?Plus DESCRIBE.
В приведенном ниже примере описана таблица customers:
SQL> DESCRIBE customers
Name N u ll? Type
CUSTOMER_ID
FIRST_NAME
LAST_NAME
DOB
PHONE
NOT NULL
NOT NULL
NOT NULL
NUMBER(38)
VARCHAR2(10)
VARCHAR2(10)
DATE
VARCHAR2(12)
□
Столбцы customer_id, first_n am e и last_name объявлены NOT NULL, что
означает, что при вводе строки следует обязательно обеспечить значения
для этих столбцов. Для столбцов dob и phone указывать значения при вводе
не обязательно. При желании можно при вводе пропустить эти значения,
и они будут автоматически заменены значением NULL.
Выполните приведенный ниже оператор INSERT, который добавляет
строку в таблицу customers. Обратите внимание, что порядок следования
значений в списке значений совпадает с порядком следования столбцов
в списке столбцов:
SQL> INSERT INTO customers (
2 customer_id, firat_name, last_name, dob, phone
3 ) VALUES (
4 6, ‘ F re d ’ , ‘ Brown’ , ' 01-Jan-1970’ , ‘ 800-555-1215’
5 );
1 row cre ated .
Примечание SQL*Plus автоматически нумерует строки оператора после нажатия ENTER
в конце каждой строки.
В предыдущем примере, после того как будет выполнен оператор
INSERT, SQI?Plus отвечает, что введена одна строка. В этом можно убедиться,
если выполнить следующий оператор SELECT:
SQL> SELECT *
FROM customers;
CUST0MER_ID FIRST_NAME LAST_NAME DOB PHONE
1 John Brown 01-JAN-65 800-555-1211
2 Cynthia Green 05-FEB-68 800-555-1212
3 Steve White 16—MAR—71 800-555-1213
4 G a il B lack 800-555-1214
5 Doreen Blue 20-MAY-70
6 Fred Brown 01-Jan-70 800-555-1215
Обратите внимание: в таблицу действительно вставлена новая строка.
22 Глава 1
По умолчанию база данных Oracle отображает даты в формате DD-M0NYY,
где DD - это номер дня, M0N - первые три символа месяца (в верхнем регистре),
a YY - две последние цифры года. На самом деле база данных, конечно,
хранит все четыре цифры года, но по умолчанию на экран выводятся
только две последние.
Когда строка добавляется в таблицу customers, то столбцу customer id
должно быть дано уникальное значение. База данных Oracle не позволит
добавить строку со значением первичного ключа, которое уже существует
в таблице; например, следующий оператор INSERT выдает ошибку, поскольку
строка с customer_id, равным 1, уже существует:
□ SQL> INSERT INTO customers (
2 customer_id, first_name, last_name, dob, phone
3 ) VALUES (
4 1, ’Lisa', ’Jones’, ’02-JAN-1971’ ’800-555-1225’
5 );
INSERT INTO customers (
ERROR a t lin e 1: „
0RA-00001: unique c o n s t r a in t (STORE.CUST0MERS_PK) v io la te d
Обратите внимание, что имя ограничения показано в сообщении об
ошибке (CUST0MERS_PK). Именно поэтому следует всегда именовать ограничения
ключей; в противном случае база данных Oracle дает сгенерированные
системой недружественные имена для ограничений (например, SYS_
С0011277).
Изменение существующей строки в таблице
Для изменения строк в таблице используется оператор UPDATE. Обычно
при использовании оператора UPDATE в нем нужно указать следующую информацию:
■ имя таблицы, в которой содержится подлежащая изменению строка,
■ фразу WHERE, которая определяет подлежащие изменению строки,
■ список имен столбцов вместе с их новыми значениями, указанных
с использованием фразы SET.
Используя оператор UPDATE, можно изменить за один раз одну или несколько
строк таблицы. Если было указано более одной строки, одни и те
же изменения будут применены ко всем строкам. Следующий оператор изменяет
значение столбца last_name на Orange для строки таблицы customers,
в которой значение столбца customer_id равно 2:
□ SQL> UPDATE customers
2 SET last_name = 'Orange'
3 where customer_id = 2;
1 row updated.
SQITPlus подтверждает, что была обновлена одна строка.
Введение 23
Предупрежденке Если вы забудете добавить в оператор фразу WHERE, то будут обновлены
все строки.
С л е д ую щ и й зап р о с п о зв о л я е т уб ед и т ь ся в том , ч т о п р е ды д ущ и й о п е р а т
о р UPDATE сработал:
□ SELECT *
FROM customers
WHERE customer_id = 2;