JSLスクリプトでNULL値を処理する方法やあ、
私は JSL を初めて使用します。私のバックグラウンドは pl/sql です。
Oracle テーブルへの INSERT (下記参照) が、いくつかの列に NULL 値を持つ行で失敗します。
Oracleでは、NVL(STD_ERROR,0)などのNVLを使用します。
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);
Re: 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);
);
Re: JSL スクリプトで NULL 値を処理する方法<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />ご助力ありがとうございます
Re: JSL スクリプトで NULL 値を処理する方法ジェラルド・マクル:
数値データの場合、JMP のテストは「Is Missing ()」です。Is Missing 関数を使用して SQL ステートメントを作成します。Is Missing が true の場合は、代わりに NULL を使用します。
そこで、小規模なデータセットに対してこれを行う 1 つの方法を次に示します。
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 を表すために長さ 0 の文字列を使用することを推奨していないと思います。
マイケル・ハスラム