Cómo manejar valores NULL en el script JSLHola,
Soy muy nuevo en JSL, mi experiencia es pl/sql.
Tengo un INSERTO (ver más abajo) en una tabla de Oracle que está fallando en algunas filas que tienen valores nulos en algunas de las columnas.
En Oracle, solo usaría NVL, por ejemplo, NVL (STD_ERROR, 0)
¿Cómo puedo hacer esto en JSL? En este caso, es solo la columna 7 la que está causando el problema, pero envolvería todas las columnas en la función (?).
Cualquier ayuda es muy apreciada.
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: Cómo manejar valores NULL en script JSLAquí hay otro enfoque.Cree una nueva función que actúe de manera similar a la función NVL de Oracle con un ligero cambio: devuelve una cadena de caracteres.Tenga en cuenta que devuelvo la cadena vacía "" para sus variables de caracteres y devuelvo "NULL" para valores numéricos.
/*
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: Cómo manejar valores NULL en script JSL<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />Muchas gracias por su ayuda
Re: Cómo manejar valores NULL en script JSLGerard McL:
Para datos numéricos, la prueba en JMP es "Falta ()".Use la función Is Missing para construir su declaración SQL. Cuando Is Missing es verdadero, entonces use NULL en su lugar.
Entonces, aquí hay una forma de hacerlo para pequeños conjuntos de datos:
Comenzaría con una cadena básica para la instrucción SQL y luego recorrería todos los valores, probando cada valor.
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
Alternativamente, puede tomar una columna numérica y cambiar el Tipo de datos a Carácter.En este caso, los valores faltantes cambiarán a cadenas de longitud 0. Sin embargo, creo que Oracle recomienda no usar cadenas de longitud cero para representar NULL.
miguel haslam