如何在 JSL 腳本中處理 NULL 值你好,
我對 JSL 很陌生,我的背景是 pl/sql。
我對 Oracle 表執行 INSERT(見下文),該表在某些列中具有空值的某些行上失敗。
在 Oracle 中,我只使用 NVL,例如 NVL(STD_ERROR,0)
我怎樣才能在 JSL 中做到這一點? 在這種情況下,只是第 7 列導致了問題,但我會將所有列包裝在函數中(?)。
任何幫助是極大的讚賞。
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);
回复:如何在 JSL 腳本中處理 NULL 值這是另一種方法。創建一個新函數,其作用類似於 Oracle 的 NVL 函數,但略有不同 - 它返回一個字符串。請注意,我為字符變量返回空字符串“”,為數值返回“NULL”。
/*
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);
);
回复:如何在 JSL 腳本中處理 NULL 值<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />非常感謝您的幫助
回复:如何在 JSL 腳本中處理 NULL 值杰拉德·麥克爾:
對於數值數據,JMP 中的測試為“Is Missing ()”。使用 Is Missing 函數構建 SQL 語句,當 Is Missing 為 true 時,則使用 NULL 代替。
因此,這是針對小數據集的一種方法:
您將從 SQL 語句的基本字符串開始,然後循環遍歷所有值,測試每個值。
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
或者,您可以採用數字列並將數據類型更改為字符。在這種情況下,缺失值將更改為長度為 0 的字符串。但是,我認為 Oracle 不建議使用零長度字符串來表示 NULL。
邁克爾·哈斯拉姆