안녕하세요 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가 이러한 모든 포맷된 유형을 숫자로 보기 때문에 함수에 그것을 포함하는 방법을 모르겠습니다.
또 다른 문제는 데이터 중복을 처리하는 것입니다. 제 함수를 사용하면 데이터 테이블의 내용이 무작정 데이터베이스에 삽입됩니다. 그러면 중복이 발생할 수 있는데, 이미 무엇이 있는지 모르기 때문입니다. 다른 게시물에서 이 함수를 찾았습니다.
dt << 데이터베이스 저장( dbc,
"dbo.fake",
바꾸다
);
불행히도, 그렇게 하면 제가 사용할 수 없는 테이블 전체를 교체해야 합니다.
그래서 저는 커뮤니티에 도움을 요청하고 싶습니다. 이런 문제를 해결하는 애드인이나 스크립트 솔루션을 아는 사람이 있나요?