在oracle过程中打开和关闭连接

时间:2015-10-19 08:36:17

标签: oracle stored-procedures plsql transactions dblink

我有以下过程,我使用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;

1 个答案:

答案 0 :(得分:3)

ALTER SESSION CLOSE DATABASE LINK <user_supplied>; 

Reference