Ciao JMP-Community,
Sto cercando il tuo aiuto qui perché non ho trovato una soluzione sufficiente per me stesso in altri post. Si tratta di scrivere il contenuto di una tabella dati in una tabella di un database.
Per questo ho scritto questa piccola funzione:
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)
);La funzione fa ciò che dovrebbe, ma ci sono delle limitazioni che non so come risolvere. Ad esempio, stiamo usando un database postgresql in cui le tabelle hanno timestamp, date o altre colonne formattate. Non ho idea di come includerlo nella mia funzione, perché JMP vede tutti questi tipi formattati come un numero.
Un altro problema è gestire i duplicati di dati. Con la mia funzione il contenuto di una tabella di dati verrebbe inserito alla cieca nel nostro database. Ciò può portare a duplicati, perché non so cosa c'è già lì. Ho trovato in un altro post questa funzione:
dt << Salva database( dbc,
"dbo.falso",
Sostituire
);
Sfortunatamente, ciò sostituirebbe l'intero tavolo, che non potrei utilizzare.
Pertanto vorrei chiedere aiuto alla comunità. Qualcuno conosce un componente aggiuntivo o una soluzione script che risolva questi problemi?