多线程提升由多组只作条件查询速度(oracle数据库)
using Kingdee.BOS; using Kingdee.BOS.Log; using Kingdee.BOS.ServiceHelper; using Kingdee.K3.FIN.App.Core; using System; using System.Collections.Generic; using System.Linq; using System.Threading; using System.Threading.Tasks; namespace HANS.SupplierSupplyRatio { internal class MutiThreadQry { static volatile object lockor = new object(); public static void MTQry(Context context) { Monitor.Enter(lockor); string targetTableName = CommonFunction.GetTempTableName(context); DBServiceHelper.Execute(context, string.Format(@"/*dialect*/ create table {0} as SELECT t0.FBILLNO FBILLNOKEY, t0.FID FBILLIDKEY, t1.FSeq FBILLSEQKEY, t1.FENTRYID FENTRYIDKEY, 1 FID, '16' FENTRYID, 'PRD_PickMtrl' FBILLFROMID, 'GENERAL' FTRANSFERDIRECT, '2' FADJCOSTBILLTYPE, '0' FISOTHERACCTG, '0' FINOUTINDEX, '8' FOUTINSTOCKTYPE, t1.FMATERIALID FMATERIALFIELD, t0.FDATE FBILLDATEFIELD, t1_A.FPARENTOWNERTYPEID FCARGOOWNERTYPE, t1_A.FPARENTOWNERID FCARGOOWNERID, t0.FSTOCKORGID FSTOCKORGFIELD, t0.FDOCUMENTSTATUS FBILLSTATE, ' ' FAUXPROPNAME, ' ' FSTOCKLOCNAME, ' ' FSPECIALNAME, ' ' FCUSTOMIZATION, ' ' FVOUCHERNO, t0.FCREATORID FCREATORID, t0.FAPPROVERID FAUDITORID, N' ' FSERIALNUM, 0 FLOCALAMOUNT, t0_L.FDESCRIPTION FMEMO, N' ' FSRCBILLNO, N' ' FSRCBILLSEQ, t1.FSTOCKID FSTOCKFIELD, t1.FSTOCKLOCID FSTOCKLOCFIELD, t1.FBASEUNITID FBASICUNITFIELD, t1.FLOT FBATCHFIELD, t1.FAUXPROPID FAIDPROPERTYFIELD, t1_A.FBASESTOCKACTUALQTY FQTYFIELD, NVL(s2_c.FPRICE, t1.FPRICE) FPRICEFIELD, NVL(s2_c.FAMOUNT_LC, 0) FAMOUNTFIELD, t1.FWORKSHOPID FDEPTFIELD, t0.FBILLTYPE FBILLTYPEID, N' ' CREATORID_ID, N' ' STOCKORGID_ID FROM T_PRD_PICKMTRL T0 INNER JOIN T_PRD_PICKMTRLDATA T1 ON t0.FID = t1.FID INNER JOIN T_PRD_PICKMTRLDATA_A T1_A ON t1.FENTRYID = t1_A.FENTRYID LEFT OUTER JOIN T_PRD_PICKMTRL_L T0_L ON (t0.FID = t0_L.FID AND t0_L.FLocaleId = 2052) LEFT OUTER JOIN t_BD_StockStatus ST128 ON t1.FSTOCKSTATUSID = st128.FStockStatusId LEFT OUTER JOIN T_PRD_PICKMTRLDATA_C S2_C ON (s2_c.FENTRYID = t1.FENTRYID AND (s2_c.FDIMENSIONID IN (1, 120, 15, 5, 139, 121, 140, 141, 142, 148, 149, 155, 156))) WHERE 1=2 and (((((((((((t1_A.FENTRYVMIBUSINESS = '0' AND t1_A.FOWNERTYPEID = 'BD_OwnerOrg') AND t1_A.FPARENTOWNERTYPEID = 'BD_OwnerOrg') AND (t0.FDOCUMENTSTATUS <> 'Z')) AND t0.FCANCELSTATUS = 'A') AND (t1_A.FBASESTOCKACTUALQTY > 0)) AND (st128.FTYPE <> '8')) AND 1 = 1) AND (t0.FDATE >= sysdate-450)) AND (t0.FDATE < sysdate-360)) AND (t1_A.FPARENTOWNERID IN (1))) AND t0.FFORMID = 'PRD_PickMtrl')", targetTableName)); string strOrg = "1, 298255, 298256, 298257, 298258, 298259, 298260, 298261, 298262, 298263, 298264, 298265, 298266, 298267, 298268, 298269, 298270, 298271, 298272, 298273, 298274, 298275, 298276, 298277, 298278, 298279, 298280, 298281, 298282, 298283, 298284, 298285, 298286, 298287, 298288, 298289, 298290, 298291, 298292, 298293, 298294, 298296, 298297, 245008, 298299, 298300, 298301, 298302, 298303, 298304, 298305, 298306, 298307, 298308, 298309, 298310, 298311, 298312, 298313, 298314, 298315, 298316, 298317, 298318, 298319, 298320, 298321, 298322, 298323, 298324, 298325, 298326, 298327, 298328, 298329, 298330, 298331, 298333, 298334, 298335, 298336, 298337, 298338, 298339, 298340, 298341, 298342, 298343, 298344, 298345, 298346, 298347, 298348, 298349, 298350, 298351, 298352, 298353, 298354, 298355, 298356, 298357, 298358, 298359, 298360, 298361, 298362, 298363, 298364, 298365, 298369, 298370, 298371, 298372, 298373, 298374, 298375, 298376, 298377, 298378, 298379, 298380, 298381, 298382, 70698386, 76777400, 70243721, 70243724, 70243727, 90984089, 90984091, 98595165, 98595158, 86878528, 86879012"; string[] arrOrg = strOrg.Split(','); //任务集合 List<Task> mTask = new List<Task>(); //总记录数 long totalRecord = arrOrg.Length; //每页大小 long pageSize = 10000L; //一共有多少页 long totalPage = (totalRecord + pageSize - 1L) / pageSize; //当前页 long currentPageIndex = 1L; while (currentPageIndex <= totalPage) { var arrCurrentOrg = arrOrg.Skip(Convert.ToInt32((currentPageIndex - 1L) * pageSize)).Take(Convert.ToInt32(pageSize)); var strCurrentOrg = string.Join(",", arrCurrentOrg); var task = Task.Factory.StartNew(() => { Write(context, targetTableName, strCurrentOrg); }); mTask.Add(task); currentPageIndex = currentPageIndex + 1; } Monitor.Exit(lockor); try { Task.WaitAll(mTask.ToArray()); } catch (AggregateException ex) { Logger.Error("HANS.SupplierSupplyRatio.MTQry", "多线程运行产生异常!", ex); } CommonFunction.DropTempTable(context, targetTableName, true); } static void Write(Context context, string targetTableName, string orgIds) { var strInsertSQL = string.Format(strFields, targetTableName, orgIds); DBServiceHelper.Execute(context, strInsertSQL); } const string strFields = @"/*dialect*/ INSERT /*+ parallel(4) */ INTO {0} (FBillNoKey, FBillIdKey, FBillSeqKey, FEntryIdKey, FID, FEntryId, FBillFromId, FTransferDirect, FAdjCostBillType, FIsOtherAcctg, FInOutIndex, FOutInStockType, FMaterialField, FBillDateField, FCargoOwnerType, FCargoOwnerId, FStockOrgField, FBillState, FAuxPropName, FStockLocName, FSpecialName, FCustomization, FVoucherNo, FCreatorId, FAuditorId, FSerialNum, FLocalAmount, FMemo, FSrcBillNo, FSrcBillSeq, FStockField, FStockLocField, FBasicUnitField, FBatchField, FAidPropertyField, FQtyField, FPriceField, FAmountField, FDEPTFIELD, FBillTypeId, CreatorId_Id, StockOrgID_Id) SELECT t0.FBILLNO FBILLNOKEY, t0.FID FBILLIDKEY, t1.FSeq FBILLSEQKEY, t1.FENTRYID FENTRYIDKEY, 1 FID, '16' FENTRYID, 'PRD_PickMtrl' FBILLFROMID, 'GENERAL' FTRANSFERDIRECT, '2' FADJCOSTBILLTYPE, '0' FISOTHERACCTG, '0' FINOUTINDEX, '8' FOUTINSTOCKTYPE, t1.FMATERIALID FMATERIALFIELD, t0.FDATE FBILLDATEFIELD, t1_A.FPARENTOWNERTYPEID FCARGOOWNERTYPE, t1_A.FPARENTOWNERID FCARGOOWNERID, t0.FSTOCKORGID FSTOCKORGFIELD, t0.FDOCUMENTSTATUS FBILLSTATE, ' ' FAUXPROPNAME, ' ' FSTOCKLOCNAME, ' ' FSPECIALNAME, ' ' FCUSTOMIZATION, ' ' FVOUCHERNO, t0.FCREATORID FCREATORID, t0.FAPPROVERID FAUDITORID, N' ' FSERIALNUM, 0 FLOCALAMOUNT, t0_L.FDESCRIPTION FMEMO, N' ' FSRCBILLNO, N' ' FSRCBILLSEQ, t1.FSTOCKID FSTOCKFIELD, t1.FSTOCKLOCID FSTOCKLOCFIELD, t1.FBASEUNITID FBASICUNITFIELD, t1.FLOT FBATCHFIELD, t1.FAUXPROPID FAIDPROPERTYFIELD, t1_A.FBASESTOCKACTUALQTY FQTYFIELD, NVL(s2_c.FPRICE, t1.FPRICE) FPRICEFIELD, NVL(s2_c.FAMOUNT_LC, 0) FAMOUNTFIELD, t1.FWORKSHOPID FDEPTFIELD, t0.FBILLTYPE FBILLTYPEID, N' ' CREATORID_ID, N' ' STOCKORGID_ID FROM T_PRD_PICKMTRL T0 INNER JOIN T_PRD_PICKMTRLDATA T1 ON t0.FID = t1.FID INNER JOIN T_PRD_PICKMTRLDATA_A T1_A ON t1.FENTRYID = t1_A.FENTRYID LEFT OUTER JOIN T_PRD_PICKMTRL_L T0_L ON (t0.FID = t0_L.FID AND t0_L.FLocaleId = 2052) LEFT OUTER JOIN t_BD_StockStatus ST128 ON t1.FSTOCKSTATUSID = st128.FStockStatusId LEFT OUTER JOIN T_PRD_PICKMTRLDATA_C S2_C ON (s2_c.FENTRYID = t1.FENTRYID AND (s2_c.FDIMENSIONID IN (1, 120, 15, 5, 139, 121, 140, 141, 142, 148, 149, 155, 156))) WHERE (((((((((((t1_A.FENTRYVMIBUSINESS = '0' AND t1_A.FOWNERTYPEID = 'BD_OwnerOrg') AND t1_A.FPARENTOWNERTYPEID = 'BD_OwnerOrg') AND (t0.FDOCUMENTSTATUS <> 'Z')) AND t0.FCANCELSTATUS = 'A') AND (t1_A.FBASESTOCKACTUALQTY > 0)) AND (st128.FTYPE <> '8')) AND 1 = 1) AND (t0.FDATE >= sysdate-450)) AND (t0.FDATE < sysdate-360)) AND (t1_A.FPARENTOWNERID IN ({1}))) AND t0.FFORMID = 'PRD_PickMtrl')"; } }
多线程提升由多组只作条件查询速度(oracle数据库)
using Kingdee.BOS;using Kingdee.BOS.Log;using Kingdee.BOS.ServiceHelper;using Kingdee.K3.FIN.App.Core;using System;using System.Co...
点击下载文档
上一篇:钉钉打开移动审批报错下一篇:BOS账表查询,使用多线程,提升报表查询速度
本文2024-09-16 18:39:04发表“云星空知识”栏目。
本文链接:https://wenku.my7c.com/article/kingdee-k3cloud-23514.html
您需要登录后才可以发表评论, 登录登录 或者 注册
最新文档
- 鼎捷EAI整合規範文件V3.1.07 (集團).pdf
- 鼎捷OpenAPI應用場景說明_基礎資料.pdf
- 鼎捷OpenAPI應用場景說明_財務管理.pdf
- 鼎捷T100 API設計器使用手冊T100 APIDesigner(V1.0).docx
- 鼎新e-GoB2雲端ERP B2 線上課程E6-2應付票據整批郵寄 領取.pdf
- 鼎新e-GoB2雲端ERP B2 線上課程A4使用者建立權限設定.pdf
- 鼎新e-GoB2雲端ERP B2 線上課程C3會計開帳與會計傳票.pdf
- 鼎新e-GoB2雲端ERP B2 線上課程E6-1應付票據.pdf
- 鼎新e-GoB2雲端ERP B2 線上課程A5-1進銷存參數設定(初階篇).pdf
- 鼎新e-GoB2雲端ERP B2 線上課程D2帳款開帳與票據開帳.pdf
热门文章