#sql #oracle #plsqldeveloper
#sql #Oracle #plsqldeveloper
Вопрос:
У меня есть одна таблица:
CREATE TABLE cust (
cust_id NOT NULL,
cust_name NOT NULL,
address NULL
);
Я должен вставить эти строки в другую таблицу:
CREATE TABLE 1cust_det (
cust_id NOT NULL,
cust_name NOT NULL,
address NOT NULL
);
К сожалению cust.address
, столбец содержит нулевые значения. Я хочу вставить эти строки из cust
в с 1cust_det
помощью курсора. Что мне нужно сделать?
Ответ №1:
INSERT INTO
cust_det
SELECT
cust_id,
cust_name,
COALESCE(address, 'UNKNOWN')
FROM
cust
Ответ №2:
Если у вас есть доступ к изменению целевой таблицы, просто добавьте значение по умолчанию в столбец.
CREATE TABLE 1cust_det (
cust_id NOT NULL,
cust_name NOT NULL,
address NOT NULL DEFAULT 'DEFAULT_VALUE');
или, если вы можете отредактировать существующую целевую таблицу, и она не будет удалена
ALTER TABLE 1cust_det
ALTER address SET DEFAULT 'DEFAULT_VALUE'
Самый простой способ, если у вас нет контроля над таблицей назначения, добавить значение по умолчанию в столбец адреса, — это использовать оператор case в самой вставке. В приведенном ниже примере вы также можете использовать вычисление ISNULL, но, возможно, вам также захочется выполнить поиск пустых строк. Пожалуйста, попробуйте найти лучший способ вставки вместо использования курсора.
INSERT dbo.1cust_det
(cust_id,cust_name,[address])
SELECT cust_id,cust_name,
CASE
WHEN [address] IS NULL THEN 'some default value'
ELSE [address]
END AS [address]
FROM cust
Комментарии:
1. Примечание; значения по умолчанию применяются только тогда, когда оператор insert не указывает столбец. Это означает, что либо все вставленные строки получают значение по умолчанию, либо вы сталкиваетесь с той же проблемой.
Ответ №3:
Приведенные выше ответы верны. У вас может быть другая таблица, которая может иметь адрес для cust_id. Присоединитесь к этой таблице, чтобы получить отсутствующий адрес. Я видел, что почти во всех базах данных адрес сохраняется для каждого клиента. Вы должны получить адрес, где адрес равен НУЛЮ в таблице cust.