こんにちは、JMPコミュニティの皆様
他の投稿では自分にとって十分な解決策が見つからなかったため、ここであなたの助けを求めています。これは、データ テーブルの内容をデータベースのテーブルに書き込むことです。
そのために、私は次の小さな関数を書きました:
myInsertInto = function({dt, dbConnection, destinationName},
cols = dt << GetColumnNames(String);
rows = dt << Select All Rows << GetSelectedRows;
show(cols, rows);
//prepare sql head
sqlHead = "Insert Into " || destinationName || " (";
for each({col, index}, cols,
if(index == Length(cols),
sqlHead = sqlHead || col ||")",
sqlHead = sqlHead || col ||",";
)
);
//prepare sql body
sqlBody = "Values\!n";
ForEach({row, index}, rows,
sqlBody = sqlBody || "(";
show(row);
values = dt[row,0];
show(values);
for each({val, index}, values,
if(type(val) == "String",
if(IsMissing(val),
tmpVal = "null",
tmpVal = "'"||val||"'"
)
,
if(IsMissing(val),
tmpVal = "null",
tmpVal = char(val)
)
);
if(index == Length(values),
sqlBody = sqlBody || tmpVal ||")",
sqlBody = sqlBody || tmpVal ||",";
)
);
if(index == Length(rows),
sqlBody = sqlBody || ";",
sqlBody = sqlBody || ",\!n"
);
);
sqlQurey = sqlHead || "\!n" || sqlBody;
New SQL Query(
Version( 130 ),
Connection( myDbHandle ),
QueryName( "messwert.test_struktur_dennis" ),
Custom SQL(
Substitute(sqlQurey,"\!n", "", "\!t", "")
)
)<< run;
return(sqlQurey)
);関数は期待どおりに動作しますが、解決方法がわからない制限があります。たとえば、テーブルにタイムスタンプ、日付、またはその他のフォーマットされた列がある postgresql データベースを使用しています。JMP はこれらのフォーマットされた型をすべて数値として認識するため、これを関数に含める方法がわかりません。
もう 1 つの問題は、データの重複を処理することです。私の関数では、データ テーブルの内容がデータベースに盲目的に挿入されます。すでに何が存在するかわからないため、重複が発生する可能性があります。別の投稿で次の関数を見つけました。
dt << データベースを保存( dbc,
「dbo.偽物」、
交換する
);
残念ながら、そうするとテーブル全体が置き換わってしまうので、使用できなくなります。
そのため、コミュニティに助けを求めたいと思います。これらの問題を解決するアドインまたはスクリプト ソリューションについて知っている人はいますか?