Come gestire i valori NULL nello script JSLCIAO,
Sono molto nuovo in JSL, il mio background è pl/sql.
Ho un INSERT (vedi sotto) in una tabella Oracle che non funziona su alcune righe che hanno valori nulli in alcune colonne.
In Oracle userei solo NVL, ad esempio NVL (STD_ERROR, 0)
Come posso farlo in JSL? In questo caso è solo la colonna 7 a causare il problema, ma avvolgerei tutte le colonne nella funzione (?).
Qualsiasi aiuto è molto apprezzato.
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);
Ri: Come gestire i valori NULL nello script JSLEcco un altro approccio.Crea una nuova funzione che agisce in modo simile alla funzione NVL di Oracle con una leggera variazione: restituisce una stringa di caratteri.Si noti che sto restituendo la stringa vuota "" per le variabili dei caratteri e restituendo "NULL" per i valori numerici.
/*
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);
);
Ri: Come gestire i valori NULL nello script JSL<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />Grazie mille per il tuo aiuto
Ri: Come gestire i valori NULL nello script JSLGerardo McL:
Per i dati numerici, il test in JMP è "Is Missing ()".Usa la funzione Is Missing per costruire la tua istruzione SQL, When the Is Missing è true, quindi usa NULL.
Quindi, ecco un modo per farlo per piccoli set di dati:
Dovresti iniziare con una stringa di base per l'istruzione SQL e quindi eseguire il ciclo di tutti i valori, testando ogni valore.
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
In alternativa, puoi prendere una colonna numerica e modificare il Tipo di dati in Carattere.In questo caso, i valori mancanti cambieranno in stringhe di lunghezza 0. Tuttavia, credo che Oracle sconsiglia la pratica di utilizzare stringhe di lunghezza zero per rappresentare NULL.
Michael Haslam