我有以下过程,我使用select语句将数据插入temp_soap_monitoring表。我在FONIC_RETAIL
数据库中有soap_monitoring表,我想从中获取数据并插入temp_soap_monitoring表。我正在为此过程每5分钟执行一次调度程序作业,这样我总能从soap_monitoring @ fonic_retail表中获取最新数据。此过程的问题是运行此过程需要太多的成本和查询执行时间。每次它尝试从db链接获取数据并将其保存到本地数据库。我记得在jave,php和其他编程语言中,当我们尝试从db链接获取数据时,我们有方法打开数据库连接,然后一旦插入完成,我们就可以关闭数据库连接。因此性能得到改善,并且它也不会对db链接施加负载。在这种方法中,我们不必分配db链接来获取数据。所以我相信有没有办法在我的oracle程序中应用这个逻辑。问题出现了,因为现在我正在硬编码数据库链接,但现在我有3个数据库链接,我不想通过分配不同的数据库链接来复制相同的过程。
PROCEDURE "EXT_SOAP_MONITORING" AS
LAST_SM_ID Number := 0;
LAST_CAPT_DATE DATE;
BEGIN
SELECT LAST_TASK_ID INTO LAST_SM_ID FROM CAPTURING where DB_TABLE='TEMP_SOAP_MONITORING';
insert into TEMP_SOAP_MONITORING(ID,REQUEST_XML,RESPONSE_XML,WEB_SERVICE_NAME,WEB_METHOD_NAME,CREATE_DATE,ERROR_CODE,ERROR_MESSAGE)
select ID,REQUEST_XML,RESPONSE_XML,WEB_SERVICE_NAME,WEB_METHOD_NAME,CREATE_DATE,ERROR_CODE,ERROR_MESSAGE from
SOAP_MONITORING@FONIC_RETAIL WHERE WEB_SERVICE_NAME ='RatorWebShopService' and WEB_METHOD_NAME = 'placeShopOrder' and ID > LAST_SM_ID order by ID desc;
update
CAPTURING set LAST_TASK_ID=
CASE WHEN ((SELECT MAX(ID) from TEMP_SOAP_MONITORING) IS NULL) AND (LAST_TASK_ID IS NULL) THEN (SELECT MAX(ID) from SOAP_MONITORING@FONIC_RETAIL)
WHEN (SELECT MAX(ID) from TEMP_SOAP_MONITORING) IS NULL THEN LAST_TASK_ID + 1
ELSE (SELECT MAX(ID) from TEMP_SOAP_MONITORING) END,
CAPTURING_DATE = CURRENT_TIMESTAMP, LAST_CAPTURED_DATE = LAST_CAPT_DATE where DB_TABLE='TEMP_SOAP_MONITORING';
END EXT_SOAP_MONITORING;