Umgang mit NULL-Werten im JSL-SkriptHallo,
Ich bin sehr neu bei JSL, mein Hintergrund ist pl/sql.
Ich habe ein INSERT (siehe unten) für eine Oracle-Tabelle, das in einigen Zeilen fehlschlägt, die in einigen Spalten Nullwerte haben.
In Oracle würde ich einfach NVL verwenden, z. B. NVL(STD_ERROR,0)
Wie kann ich das in JSL machen? In diesem Fall ist es nur Spalte7, die das Problem verursacht, aber ich würde alle Spalten in die Funktion einschließen (?).
Jede Hilfe wird sehr geschätzt.
for (i = 1, i <= nrows(dt), i++,
sql_statement =
"INSERT INTO TBL_COMBINED_STG " ||
"(Y_AXIS, PROD, LOT, TERM, BIAS, ESTIMATE, STD_ERROR, TRATIO, PROB_T) " ||
"VALUES(" ||ULL
"'" || char(column(1)) || "', " ||
"'" || char(column(2)) || "', " ||
"'" || char(column(3)) || "', " ||
"'" || char(column(4)) || "', 0," ||
//char(column(5)) || ", " ||
char(column(6)) || ", " ||
char(column(7)) || ", " ||
char(column(8)) || ", " ||
char(column(9)) || ") ";
// JMP will add a commit to the insert statement.
Execute SQL(dbc, sql_statement);
Betreff: Umgang mit NULL-Werten im JSL-SkriptHier ist ein anderer Ansatz.Erstellen Sie eine neue Funktion, die sich mit einer kleinen Wendung ähnlich wie die NVL-Funktion von Oracle verhält: Sie gibt eine Zeichenfolge zurück.Beachten Sie, dass ich für Ihre Zeichenvariablen die leere Zeichenfolge „“ und für numerische Werte „NULL“ zurückgebe.
/*
nvl_char: convert number to a character. If missing return the second value
Arguments:
one_value Numeric value to convert to a character
value_if_null Character string to return if one_value is missing
*/
nvl_char = Function( {one_value, value_if_null},
{Default Local},
if (is missing(one_value),
// then
value_if_null,
// else
char(one_value);
);
);
// Test out the function
nvl_char(123, "NULL");
nvl_char(., "NULL");
nvl_char(., "");
for (i = 1, i <= nrows(dt), i++,
sql_statement =
"INSERT INTO TBL_COMBINED_STG " ||
"(Y_AXIS, PROD, LOT, TERM, BIAS, ESTIMATE, STD_ERROR, TRATIO, PROB_T) " ||
"VALUES(" ||
"'" || nvl_char(column(1)[i], "") || "', " ||
"'" || nvl_char(column(2)[i], "") || "', " ||
"'" || nvl_char(column(3)[i], "") || "', " ||
"'" || nvl_char(column(4)[i], "") || "', 0," ||
//char(column(5)) || ", " ||
nvl_char(column(6)[i], "NULL") || ", " ||
nvl_char(column(7)[i], "NULL") || ", " ||
nvl_char(column(8)[i], "NULL") || ", " ||
nvl_char(column(9)[i], "NULL") || ") ";
// JMP will add a commit to the insert statement.
Execute SQL(dbc, sql_statement);
);
Betreff: Umgang mit NULL-Werten im JSL-Skript<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />Vielen Dank für Ihre Hilfe
Betreff: Umgang mit NULL-Werten im JSL-SkriptGerardMcL:
Für numerische Daten lautet der Test in JMP „Ist Missing ()“.Verwenden Sie die Funktion Is Missing, um Ihre SQL-Anweisung zu erstellen. Wenn Is Missing wahr ist, verwenden Sie stattdessen NULL.
Hier ist also eine Möglichkeit, dies für kleine Datensätze zu tun:
Sie würden mit einer einfachen Zeichenfolge für die SQL-Anweisung beginnen und dann alle Werte durchlaufen und jeden Wert testen.
sql statement = beginning stuff || " VALUES("
For (I_Counter=1, I_Counter<=NCols(), I_Counter++,
If (IsMissing(thing I want to test),
sql statement = sql statement || "NULL, "
,
sql statement = sql statement || Char(Value) || ", "
)
);
sql statement = Left(SQL Statement, length(sql statement)-2) // removes the final comma
sql statement = sql statement + stuff to close it
Alternativ können Sie eine numerische Spalte nehmen und den Datentyp in „Zeichen“ ändern.In diesem Fall ändern sich fehlende Werte in Zeichenfolgen der Länge 0. Ich glaube jedoch, dass Oracle davon abrät, Zeichenfolgen der Länge Null zur Darstellung von NULL zu verwenden.
Michael Haslam