使用批量插入时插入空值

时间:2014-06-23 18:50:14

标签: 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列包含NULL值。我想使用游标将这些行从cust插入1cust_det。我该怎么办?

3 个答案:

答案 0 :(得分:2)

INSERT INTO
    cust_det
SELECT
    cust_id,
    cust_name,
    COALESCE(address, 'UNKNOWN')
FROM
    cust

答案 1 :(得分:1)

如果您有权更改目标表,只需在列中添加默认值。

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

答案 2 :(得分:0)

以上答案是正确的。您可能有另一个表可能具有cust_id的地址。加入该表以获取缺少的地址。我已经看到,在几乎所有数据库中,都会为每个客户存储地址。您必须获取表cust中地址为NULL的地址。