SAS Connect to DB2 – SQL1194W Rows rejected Fehler

06. Januar 2025

1. SAS Connect to DB2 Fehler: Ausgangslage

Beim Beladen einer DB2 Datenbank über SAS Connect to DB2 mittels "Bulk Load" trat immer wieder das Problem auf, dass Zeilen nicht in die Datenbank geschrieben (rejected) worden sind.

Code:



PROC SQL;
    
DROP TABLE DB2LIB.TABLE;
QUIT;

data DB2LIB.TABLE (BULKLOAD=YES BL_METHOD=CLILOAD BL_OPTIONS="ANYORDER" 
    DBCOMMIT=
50000  
    );
        set TABLE;

run;

2. SAS Connect to DB2 Fehler: Fehleranalyse SQL1194W

Die Rückmeldung der DB2 aus dem SAS-Log war zunächst wenig aussagekräftig bzw. hilfreich:

NOTE: The data set DB2LIB.TABLE has 75736151 observations and 58 variables.
WARNING: [IBM][CLI Driver][DB2/AIX64] SQL3107W  At least one warning message was encountered during LOAD processing.  

 Results for CLI LOAD operation:
 75713455 rows loaded.
 0 rows skipped.
 22696 rows rejected.
 0 rows deleted as duplicates.
 75713455 rows committed.

Das hinzufügen der Bulkload Option „BL_LOG=“ erstellt ein Log mit mehr Informationen zum Bulkload in die DB2-Datenbank

BL_LOG="e:\TABLE_DB2_Bulkload.log"

Das geschriebene Log enthält für jeden Satz der von der DB2 abgelehnt wurde die folgende Fehlermeldung:

SQL1194W  The value in row "F10-13763" corresponding to target column number
"53" is not valid. The row has been rejected

Das Problem lag also in Spalte Nummer 53 der SAS-Tabelle, die in die DB2 geschrieben wurde.

Die Analyse der Spalte zeigte, dass diese eine alphanumerische Spalte der Länge $50 war. Nach Ansicht der Inhalte der Spalte (über Proc Freq) wurde klar, dass der längste Text tatsächlich 50 Zeichen lang war und Umlaute (in diesem Fall ein „ü“) enthielt.

3. SAS Connect to DB2 Fehler: Lösung des Problems SQL1194W

Der Kern des Problems war, dass in SAS eine Länge von 50 ausreichend war um den Inhalt der Spalte korrekt abzubilden. In der DB2 wurde aber durch den Umlaut eine größere breite als Varchar(50) benötigt.

Das Hochsetzen der Breite in einer Length-Anweisung für die Spalte auf $60 hat das Problem schließlich behoben und dazu geführt, dass keine Sätze mehr von der DB2-Datenbank abgelehnt worden sind.

 Results for CLI LOAD operation:
 75736151 rows loaded.
 0 rows skipped.
 0 rows rejected.
 0 rows deleted as duplicates.
 75736151 rows committed.
cross-circleCookie Consent Banner von Real Cookie Banner