SQL自定義和評估/解析(和\!\!\!...)嗨!
我做了很多查詢,這些查詢不能使用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 ) );還有其他方法可以使我免於這些麻煩嗎\!\!\!符號?
在復雜的腳本上,真的很難處理和調試!
謝謝
腳本編寫回复:SQL自定義和評估/解析(和\!\!\!...)概述了一些選項本文,我建議從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
) );
回复:SQL自定義和評估/解析(和\!\!\!...)非常感謝你! 我已經閱讀了這篇文章並嘗試過,但在掌握此eval(eval expr(expr))時仍然遇到困難
回复:SQL自定義和評估/解析(和\!\!\!...)我將使用定界符\ [和] \在字符串中包含雙引號。
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;回复:SQL自定義和評估/解析(和\!\!\!...)我同意,這種語法只有在您理解後才顯而易見,即使那樣也會造成混淆。查看這個願望清單項目引入一個Eval Expr First()函數,也許那會更直觀?
回复:SQL自定義和評估/解析(和\!\!\!...)我喜歡走另一條路,避免直觀的eval解析組合,因為我發現它們對於其他目的非常有用。
我經常遇到復雜的查詢(由其他工具(例如SQL開發人員)在普通SQL中構建)。 我需要修改一些變量。
隨附的示例顯示了它如何與大類數據表一起使用,如何以類似的方式對所有ODBC連接起作用。
只需簡單地準備我的Connection字符串(此處未使用)和SQL Query即可,並將字符串變量指定給“ New SQL Query” .object。
我使用“ assign”(而不是“ =”),因為它適用於大型查詢和代碼折疊。
而且,我也更靈活地使用開放數據庫功能或以其他方式處理SQL。
通常,在普通的SQL中不需要雙引號(並且我也盡量避免使用雙引號),除非您具有帶空格等的名稱,例如“ Big Class”。
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;
回复:SQL自定義和評估/解析(和\!\!\!...)太好了,那真的非常有用! 並且由於我們剛剛創建了數據庫,並且我是該創建的主要參與者,因此我確保沒有表名或變量名帶有括號或空格,因此應簡化此概括。