SQL Custom and Eval / Parse (및 \! \! \! ...)안녕하세요!
JMP 쿼리 작성기를 사용할 수없고 SQL Custom으로 작성해야하는 많은 쿼리를 수행합니다.
하지만 내 코드를 일반화하고 싶기 때문에 많은 eval / inserts와 \!
다음은 예입니다.
아직 일반화되지 않은 코드
New SQL Query(
Connection(
"ODBC:blabla"
),
QueryName( "v_test_run" ),
CustomSQL(
"SELECT \!"t1\!".lot_id
FROM \!"public\!".\!"v_test_run\!" \!"t1\!"
WHERE ( ( ( \!"t1\!".test_run_timestamp >= '2020-11-01 15:25:11' ) ) ) ;"
)
) << Modify;
날짜를 포함하도록 일반화 된 코드 :
gbStr = Eval Insert("
New SQL Query(
Connection(
\!"ODBC:blabla\!"
),
QueryName( \!"v_test_run\!" ),
CustomSQL(
\!"SELECT \!\!\!"t1\!\!\!".lot_id
FROM \!\!\!"public\!\!\!".\!\!\!"v_test_run\!\!\!" \!\!\!"t1\!\!\!"
WHERE ( ( ( \!\!\!"t1\!\!\!".test_run_timestamp >= '^date_deb^' ) ) ) ;\!"
)
) << Modify;
");
Eval( Parse( gbStr ) );저를 저글링하지 않아도되는 다른 방법이 있습니까? \! \! \! 기호?
복잡한 스크립트에서는 처리하고 디버그하기가 정말 어렵습니다!
감사합니다
스크립팅Re : SQL Custom and Eval / Parse (및 \! \! \! ...)다음에 설명 된 몇 가지 옵션이 있습니다. 이 기사 , Eval (Eval Expr ())으로 시작한 다음 Expr ()으로 교체해야하는 각 부분을 래핑하는 것이 좋습니다.다음과 같이 보일 수 있습니다.
Eval( Eval Expr(
New SQL Query(
Connection(
"ODBC:blabla"
),
QueryName( "v_test_run" ),
CustomSQL(
"\[SELECT "t1".lot_id
FROM "public"."v_test_run" "t1"
WHERE ( ( ( "t1".test_run_timestamp >= ']\" || datevariable || "\[' ) ) ) ;]\"
)
) << Modify
) );
Re : SQL Custom and Eval / Parse (및 \! \! \! ...)대단히 감사합니다! 이 기사를 읽고 시도했지만 여전히이 평가판을 마스터하는 데 어려움이 있습니다 (eval expr (expr))
Re : SQL Custom and Eval / Parse (및 \! \! \! ...)구분 기호 \ [및] \를 사용하여 문자열에 큰 따옴표를 포함합니다.
date_deb = "to_date('01-Mar-2019', 'dd-mon-yyyy')";
gbStr = Eval Insert("\[
New SQL Query(
Connection(
"ODBC:blabla"
),
QueryName( "v_test_run" ),
CustomSQL(
"SELECT "t1".lot_id
FROM "public"."v_test_run" "t1"
WHERE ( ( ( "t1".test_run_timestamp >= ^date_deb^ ) ) ) ;"
)
) << Modify;
]\");
write(gbstr);
Eval( Parse( gbStr ) );
산출:
New SQL Query(
Connection(
"ODBC:blabla"
),
QueryName( "v_test_run" ),
CustomSQL(
"SELECT "t1".lot_id
FROM "public"."v_test_run" "t1"
WHERE ( ( ( "t1".test_run_timestamp >= to_date('01-Mar-2019', 'dd-mon-yyyy') ) ) ) ;"
)
) << Modify;Re : SQL Custom and Eval / Parse (및 \! \! \! ...)이 구문은 이해 한 후에 만 명확하고 혼란 스럽다는 데 동의합니다.체크 아웃 이 위시리스트 항목 Eval Expr First () 함수를 소개하는 것이 더 직관적일까요?
Re : SQL Custom and Eval / Parse (및 \! \! \! ...)저는 직관적이지 않은 평가 구문 분석 조합을 피하는 다른 경로를 따르고 싶습니다. 다른 목적으로도 유용하다고 생각합니다.
종종 복잡한 쿼리가 있습니다 (SQL 개발자와 같은 다른 도구에 의해 일반 SQL로 작성 됨). 그리고 몇 가지 변수를 수정해야합니다.
첨부 된 예제는 빅 클래스 데이터 테이블에서 작동하는 방식을 보여 주며, 유사한 방식으로 모든 ODBC 연결에서 작동하는 방식을 보여줍니다.
단순히 연결 문자열 (여기서는 사용되지 않음)과 "New SQL Query".object에 제공된 문자열 변수에 SQL 쿼리를 준비합니다.
큰 쿼리와 코드 폴딩에 잘 작동하기 때문에 "="대신에 "할당"을 사용합니다.
또한 개방형 데이터베이스 기능을 사용하거나 다른 방식으로 SQL을 처리하는 데 더 유연합니다.
일반적으로 "Big Class"와 같은 공백 등의 이름이있는 경우가 아니면 일반 SQL에서는 큰 따옴표가 필요하지 않습니다 (또한 피하려고합니다).
Names Default To Here( 1 );
cdt = Open( "$Sample_Data\Big Class.jmp" );
age = "15";
// define custom SQL with placeholder
Assign( sql_str, "SELECT t1.name, t1.age, t1.sex, t1.height,
t1.weight
FROM \!"Big Class\!" t1
WHERE ( ( ( t1.age IN ( &age ) ) ) ) ;" );
// fill placeholder
Substitute Into( sql_str, "&age", "15" );
// execute query
dt_age = New SQL Query( Version( 130 ), Connection( "JMP" ), JMP Tables( cdt ), QueryName( "aged" || "_" || age ), CustomSQL( sql_str ) ) << Run;
Re : SQL Custom and Eval / Parse (및 \! \! \! ...)아주 유용합니다! 그리고 방금 데이터베이스를 생성했고 제가이 생성의 주역 이었기 때문에, 테이블 이름이나 변수 이름에 괄호 나 공백이 없는지 확인 했으므로이 일반화를 단순화해야합니다.