是基于非空约束的nvl函数

时间:2015-09-23 15:45:47

标签: sql

请说明NVL功能的用法。

如果未从SELECT查询中找到值,则需要插入值999999,但插入值的表格列的类型为NOT NULL,并且我们执行select查询以获取值的表也是NOT NULL类型。

SOURCE(用于获取列值以加载到T_DATA表中)

COLUMN_NAME   DATA_TYPE    NULLABLE    COLUMN_ID
SRC_ID        NUMBER       No          1    

T_DATA表(加载表)

COLUMN_NAME  DATA_TYPE   NULLABLE
SRC_ID       NUMBER      No

INSERT查询:

INSERT INTO T_DATA
(select (SELECT NVL(SRC_ID,999999) FROM SOURCE 
     WHERE SRC_DESC = LTRIM(TABLE_ID)), class_code,line_number,sysdate 
   from T_VB_DATA);

因为SRC_ID IN TABLE源是NOT NULL,即使我使用NVL函数,它也不会做任何事情。那么,我是否认为它应该接受NULL值?

将列插入t_data表时,该列不能为NULL

1 个答案:

答案 0 :(得分:0)

您似乎正确使用NVL功能。根据您的说明,听起来您实际上并不需要使用NVL函数,因为SRC_ID中的SOURCE列永远不会有NULL。加载的目标表T_DATA也可以具有NOT NULL约束,因为您提供的示例插入查询不会尝试将null值插入该列。

尝试执行insert语句时是否有错误消息?或者您是否正在处理设计细节并希望确认您了解NVL功能以及如何确保插入默认值而不是null