Выбрать главу

■ таблицу, в которую следует вставить строку,

■ список столбцов, для которых вы хотите указать значения,

■ список значений, которые будут сохранены в соответствующих

столбцах.

При вставке строки необходимо обязательно предоставить значения

для первичного ключа и для всех столбцов, объявленных как 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;