Программирование >>  Преобразование значений null 

1 ... 28 29 30 [ 31 ] 32 33 34 ... 219


просто исключить этот столбец из списка вставки; ключевое слово DEFAULT не требуется. Скажем, в таблице D есть дополнительный столбец, для которого не было определено значение по умолчанию:

create table D (id integer default 0, foo varchar(10))

Можно вставить значение по умолчанию в столбец ID, указывая в списке вставки только столбец FOO:

insert into D (foo) values (Bar)

В результате этого выражения в таблицу будет вставлена строка со значением 0 в столбце ID и значением Bar в столбце FOO. Столбец ID принимает значение по умолчанию, потому что другого значения не задано.

Переопределение значения по умолчанию значением NULL

Задача

Осуществляется вставка в таблицу, столбец которой имеет значение по умолчанию, и требуется переопределить это значение значением NULL. Рассмотрим следующую таблицу:

create table D (id integer default 0, foo VARCHAR(10))

Требуется вставить строку со значением NULL в столбце ID.

Решение

Можно явно задать NULL в списке значений:

insert into d (id, foo) values (null, Brighten)

Обсуждение

Не все осознают, что значение NULL можно явно задавать в списке значений выражения INSERT. Как правило, если столбцу не задается значение, его просто не включают в список столбцов и значений:

insert into d (foo) values (Brighten)

Здесь для ID значение не задано. Многие ожидают, что столбцу будет присвоено неопределенное значение. Но, вот незадача, при создании таблицы для этого столбца было определено значение по умолчанию, поэтому в результате выполнения указанного выше выражения INSERT ID получит значение 0 (значение по умолчанию). Определение NULL в качестве значения столбца позволяет присваивать ему значение NULL, несмотря на любое заданное значение по умолчанию.



Копирование строк из одной таблицы в другую Задача

Требуется, используя запрос, скопировать строки из одной таблицы в другую. Запрос может быть сложным или простым, но требуется, чтобы в конечном счете его результат был вставлен в другую таблицу. Например, необходимо скопировать строки из таблицы DEPT в таблицу DEPT EAST, которая уже создана, имеет такую же структуру (такие же столбцы тех же типов), что и DEPT, и на данный момент является пустой.

Решение

Используйте выражение INSERT, за которым следует запрос, возвращающий необходимые строки:

1 insert into dept east (deptno,dname,loc)

2 select deptno,dname,loc

3 from dept

4 where loc in ( NEW YORK,BOSTON )

Обсуждение

Просто поставьте после выражения INSERT запрос, возвращающий требуемые строки. Если необходимо скопировать все строки исходной таблицы, уберите из запроса блок WHERE. Как и при обычной вставке, необязательно явно задавать, в какие столбцы должны быть вставлены значения. Но если имена столбцов не заданы, вставка будет производиться во все столбцы таблицы, и необходимо строго придерживаться порядка значений в списке SELECT, как описывалось ранее в разделе Вставка новой записи .

Копирование описания таблицы Задача

Требуется создать новую таблицу с таким же набором столбцов, как и в существующей. Например, необходимо создать копию таблицы DEPT под именем DEPT 2, копируя при этом только структуру столбцов, а не строки таблицы.

Решение DB2

Используйте оператор LIKE (как) с командой CREATE TABLE (создать таблицу):

create table dept 2 like dept



Oracle, MySQL и PostgreSQL

Используйте команду CREATE TABLE с подзапросом, который не возвращает ни одной строки:

1 create table dept 2

2 as

3 select *

4 from dept

5 where 1 = 0

SQL Server

Используйте оператор INTO в обычном SELECT запросе, который не возвращает ни одной строки:

1 select *

2 into dept 2

3 from dept

4 where 1 = 0

Обсуждение

Команда DB2 CREATE TABLE ... LIKE позволяет использовать одну таблицу как шаблон для создания другой таблицы. Для этого после ключевого слова LIKE просто указывается имя таблицы-шаблона.

Oracle, MySQL и PostgreSQL

При использовании конструкции Create Table As Select (CTAS) все строки, полученные в результате запроса, будут вставлены в новую таблицу. В предлагаемом решении выражение 1 = 0 в предикате WHERE обеспечивает тот факт, что запрос не возвратит ни одной строки. Таким образом, результатом выполнения данного выражения CTAS является пустая таблица, созданная на основании столбцов, указанных в операторе SELECT запроса.

SQL Server

При копировании таблицы с помощью оператора INTO все строки, полученные в результате запроса, будут использоваться для заполнения новой таблицы. Выражение 1 = 0 в предикате обусловливает, что ни одна строка не будет возвращена. В результате получаем пустую таблицу, созданную на основании столбцов, указанных в операторе SELECT запроса.

Вставка в несколько таблиц одновременно

Задача

Требуется вставить строки, возвращенные запросом, в несколько таблиц. Например, необходимо вставить строки из таблицы DEPT в таб-



1 ... 28 29 30 [ 31 ] 32 33 34 ... 219

© 2006 - 2024 pmbk.ru. Генерация страницы: 0.001
При копировании материалов приветствуются ссылки.
Яндекс.Метрика