Вставка нулевых значений при использовании массовой вставки

#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.