Hola Comunidad JMP,
Estoy buscando tu ayuda porque no encontré una solución suficiente en otras publicaciones. Se trata de escribir el contenido de una tabla de datos en una tabla de una base de datos.
Para eso escribí esta pequeña función:
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 función hace lo que debería, pero hay limitaciones que no sé cómo resolver. Por ejemplo, estamos usando una base de datos postgresql en la que las tablas tienen marcas de tiempo, fecha u otras columnas con formato. No tengo idea de cómo incluir eso en mi función, porque JMP ve todos estos tipos formateados como un número.
Otro problema es el manejo de datos duplicados. Con mi función, el contenido de una tabla de datos se insertaría a ciegas en nuestra base de datos. Eso puede generar duplicados, porque no sé qué hay ya allí. En otra publicación encontré esta función:
dt << Guardar base de datos( dbc,
"dbo.falso",
Reemplazar
);
Lamentablemente eso reemplazaría toda mi tabla, la cual no puedo usar.
Por eso, me gustaría pedir ayuda a la comunidad. ¿Alguien sabe de algún complemento o script que resuelva estos problemas?