DB2 LOAD 數據到表中 - 解釋錯誤消息
將數據從文件載入到表中時遇到了一些約束問題
** 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 行沒有載入(插入)到表中。