Comment gérer les valeurs NULL dans le script JSLSalut,
Je suis très nouveau à JSL, mon expérience est pl/sql.
J'ai un INSERT (voir ci-dessous) dans une table Oracle qui échoue sur certaines lignes contenant des valeurs nulles dans quelques-unes des colonnes.
Dans Oracle, j'utiliserais simplement NVL, par exemple NVL(STD_ERROR,0)
Comment puis-je faire cela en JSL? Dans ce cas, c'est juste column7 qui cause le problème mais j'envelopperais toutes les colonnes dans la fonction (?).
Toute aide est grandement appréciée.
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);
Re : Comment gérer les valeurs NULL dans le script JSLVoici une autre approche.Créez une nouvelle fonction qui agit de la même manière que la fonction NVL d'Oracle avec une légère torsion - elle renvoie une chaîne de caractères.Notez que je renvoie la chaîne vide "" pour vos variables de caractères et que je renvoie "NULL" pour les valeurs numériques.
/*
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);
);
Re : Comment gérer les valeurs NULL dans le script JSL<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />Merci beaucoup pour votre aide
Re : Comment gérer les valeurs NULL dans le script JSLGérard McL :
Pour les données numériques, le test dans JMP est "Is Missing ()".Utilisez la fonction Is Missing pour créer votre instruction SQL. Lorsque Is Missing est vrai, utilisez NULL à la place.
Donc, voici une façon de le faire pour les petits ensembles de données :
Vous commencerez avec une chaîne de base pour l'instruction SQL, puis effectuerez une boucle sur toutes les valeurs, en testant chaque valeur.
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
Alternativement, vous pouvez prendre une colonne numérique et changer le type de données en caractère.Dans ce cas, les valeurs manquantes seront remplacées par des chaînes de longueur 0. Cependant, je pense qu'Oracle déconseille la pratique consistant à utiliser des chaînes de longueur nulle pour représenter NULL.
Michel Haslam