插入一个字段选择语句结果

时间:2014-07-09 15:50:36

标签: sql oracle

我正在使用Oracle数据库。我有一个sql表PS_Z_STAGE_TEST_JE,它有三个字段(EMPLIDLAST_NAMEFIRST_NAME)。

我正在尝试执行select语句,该语句将从sql表中提取许多EMPLID:ps_vc_plan_mem并将其插入EMPLID列,同时保留其他两个字段({{1 }}和LAST_NAMEFIRST_NAME

下面是我的SQL但它会说

  

无法将空值插入null

当我尝试运行它时。

LAST_NAME

3 个答案:

答案 0 :(得分:1)

我在您的查询中看到的唯一明显的问题是最后的星号:

INSERT INTO sysadm.PS_Z_STAGE_TEST_JE(EMPLID) 
    SELECT DISTINCT emplid 
    FROM ps_vc_plan_mem 
    WHERE vc_plan_id IN ('PNC-RS', 'PNC-SO', 'PNC-ESPP');

请注意distinct不是函数。它是select上的修饰符,因此括号并不意味着什么。

答案 1 :(得分:0)

SQL语句末尾有星号。请删除并重试。

如果[sysadm]。[PS_Z_STAGE_TEST_JE]表有PK,则可能需要在运行语句之前截断表。

答案 2 :(得分:0)

错误消息正如它所说的那样。您的last_name列必须定义为非null。因此,您不能在其中插入null。由于您没有定义插入到插入列中的内容,因此它会尝试默认插入null并失败。

您必须在姓氏中插入内容。如果您无法获得要插入的实际姓氏,我建议使用默认字符串或空字符串。

INSERT INTO sysadm.PS_Z_STAGE_TEST_JE (EMPLID, LAST_NAME) 
SELECT DISTINCT(emplid), 'N/A'
FROM ps_vc_plan_mem 
WHERE vc_plan_id IN ('PNC-RS','PNC-SO','PNC-ESPP');

或者,您可以更改表,以便last_name可以为空。