Db2

DB2 LOAD 數據到表中 - 解釋錯誤消息

  • September 29, 2014

將數據從文件載入到表中時遇到了一些約束問題

**
SQL3109N  The utility is beginning to load data from file
"xag".
SQL3500W  The utility is beginning the "LOAD" phase at time "07/30/2012
23:33:53.199615".
SQL3519W  Begin Load Consistency Point. Input record count = "0".
SQL3520W  Load Consistency Point was successful.
SQL3116W  The field value in row "F12-33856" and column "9" is missing, but
the target column is not nullable.
SQL3185W  The previous error occurred while processing data from row
"F12-33856" of the input file.
SQL3227W  Record token "F12-33856" refers to user record number "440439".**

db2 LOAD client from data  of del MESSAGES msg replace INTO TABLE_L ;

我認為這條消息告訴我,我們在第 440439 行存在約束問題,但似乎並非如此。有誰知道如何閱讀這些消息?

根據 IBM SQL3227W的說法:

“記錄令牌token1指使用者記錄號token2。 說明

在表的 LOAD、IMPORT 或 EXPORT 期間遇到錯誤或警告。遇到問題時 CPU 並行度大於 1,並且寫入了一條 SQL 消息,該消息使用特殊的唯一令牌標識使用者記錄。此消息用於將唯一記錄令牌映射到源使用者數據的記錄號。 使用者反應

請參閱返回的原始 SQL 消息以採取適當的措施。”

所以這會讓你回到之前的錯誤。下一個SQL3185W說:

“上一個錯誤在處理來自輸入文件的行行號的數據時發生。 解釋

此消息為消息文件中列出的上一條消息(例如,SQL3306)提供了發生錯誤的行的標識。 使用者反應

無需採取任何行動。”

所以……菲爾把它釘在了頭上,我們真的需要看看這些資訊之前是什麼。您是否有可以發佈到您的問題的輸出日誌?我們可以更好地幫助您解釋結果。

話雖這麼說,我強烈鼓勵您像我一樣在資訊中心附近閒逛,因為它可以最好地幫助您找到那些討厭的“SQL”消息的含義。我找到的連結是 9.5。只需切換到您正在使用的 DB2 版本,以確保您擁有最準確的資訊。我用資訊中心做幾乎所有事情。

**編輯:**您的更新有很大幫助。這是錯誤:

SQL3116W  The field value in row "F12-33856" and column "9" is missing, but
the target column is not nullable.
SQL3185W  The previous error occurred while processing data from row
"F12-33856" of the input file.
SQL3227W  Record token "F12-33856" refers to user record number "440439".**

簡而言之,看起來我們的表的“第 9 列”寫入了一個空值,並且您對該列有一個非空約束。現在的訣竅是找到有問題的記錄。它標有兩個看起來像的標記。(F12-33856 和 440439)。我想我會先從 440439 開始。在我看來,這可能是主鍵。只是一個猜測。但至少您知道您的問題是非空欄位的空值。

錯誤消息基本上是這樣說的:對於第 440439 行,第 9 列的分隔符之間沒有任何內容。因此它將被視為 NULL,但該表不允許第 9 列的 NULL 值。所以第 440439 行沒有載入(插入)到表中。

引用自:https://dba.stackexchange.com/questions/21741