2015-09-23 15 views
-3

請說明NVL函數的用法。是基於非空約束的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

+0

請不要大聲吼我們,謝謝... – Siyual

+0

如果你查詢表t_vb_data爲空值,你找到了嗎?另外,您發佈的查詢有語法錯誤。 –

回答

0

看起來您正在正確使用NVL函數。根據您的描述,聽起來您並不需要使用NVL函數,因爲SOURCE中的SRC_ID列永遠不會有NULL。另外,獲取加載的目標表T_DATA可能具有NOT NULL約束,因爲您給出的示例插入查詢不會嘗試將null值插入到該列中。

當您嘗試執行插入語句時是否存在錯誤消息?或者你是否只是在設計細節上工作,並希望得到確認,以瞭解NVL功能以及如何確保插入默認值而不是null