如何並行執行多個 SQL 查詢、等待完成並取得資料表列表你好,
我想要一個函數,(i) 在背景執行多個 SQL 查詢(來自任意長度的字串清單的連接和 SQL 語句),(ii) 等待所有查詢完成,(iii) 返回資料表列表。 請在下面找到我的程式碼。 我不知道如何正確收集數據表。
先感謝您。
Run_SQL_Queries = 函數({o_connections, o_sqls},
i_dts = 列表();
For(i_counter = 1, i_counter <= N Items(o_connections), i_counter++,
i_dt = 空();
i_connection = o_connections[i_counter];
i_sql = o_sqls[i_counter];
查詢 = 新的 SQL 查詢(
連接(i_connection),
自訂SQL(i_sql)
) << 運行後台(OnRunComplete(i_dt = queryResult));
插入(i_dts, i_dt);
);
返回(i_dts);
);
自動化和腳本編寫資料存取回覆:如何並行執行多個 SQL 查詢、等待完成並取得資料表列表我不確定你是否可以在 JMP 中建立這樣的函數。 您可能必須在 << Run Background 中使用 << OnRunComplete 並在所有查詢準備好後使用它執行您正在執行的任何操作。
回覆:如何並行執行多個 SQL 查詢、等待完成並取得資料表列表不幸的是,JMP 僅為 JSL 提供單一執行緒。對於我的公司,我繞過了這個限制,並透過使用持久的 Python 會話來完成您想要做的事情。我從 JMP 啟動 Python 會話,該會話有一個當 STDOUT 緩衝區不為空時的鉤子,在 Python 中,我啟動本機主機伺服器並等待命令。然後在 JMP 中我可以連接到本機主機伺服器並發送訊息。然後,Python 將並行完成分配的任務(無論是 SQL 還是檔案傳輸或任何需要的任務),並在完成時提供特殊的列印語句,從而關閉循環並允許 JMP 知道查詢何時完成。
對於 SQL,我讓 Python 將結果保存在臨時檔案中,然後 JMP 可以簡單地讀取該檔案。
這有點迂迴,但並不比 JMP 提供並發或非同步執行的方法困難太多。
這工作得很好,並且 IPC 造成的速度減慢並不明顯。
回覆:如何並行執行多個 SQL 查詢、等待完成並取得資料表列表我做類似的事情已經有一段時間了。我同時執行多個查詢,然後對錶執行操作。我已針對您的應用程式調整了我的解決方案。這並不漂亮,但我在 JMP 中嘗試了很多很多其他方法,但沒有其他方法可以實現我想要的。
Names Default To Here( 1 );
o_connections = {....Connection List....};
o_sqls = {....Query List....};
::i_dts = {};
Run_SQL_Queries = Function( {o_connection, o_sql, i_counter},
{Default Local},
Eval(
Eval Expr(
Expr(
Parse( "::i_dt" || Char( i_counter ) || " = Empty()" )
);
New SQL Query( Connection( o_connection ), Custom SQL( o_sql ) ) << Run Background(
OnRunComplete(
Expr(
Parse( "::i_dt" || Char( i_counter ) || " = QueryResult;" )
);
Insert Into( ::i_dts, QueryResult )
;
)
);
)
)
);
For( i=1, i<=N Items(o_connections), i++, Run_SQL_Queries( o_connections[i], o_sqls[i], i ) );
For( i = 1, i <= N Items( o_connections ), i++,
Eval( Parse( "While(!Is Scriptable(::i_dt" || Char( i ) || "), Wait(.5))" ) )
);
Show( ::i_dt1, ::i_dt2, ::i_dts );