我正在创建一个Windows服务,它将定期调用Oracle数据库上的一组存储过程。使用SQL Developer直接调用时,这些存储过程都可以正常工作。此外,这些存储过程在通过控制台应用程序调用时都可以工作。但是,使用Windows服务调用这些存储过程时,任何具有数据库链接(到SQL Server)的存储过程都会失败。
为了解决问题,我做了以下事情......
使用以下数据库链接简化存储过程:
create or replace
PROCEDURE DATALINKTEST AS
BEGIN
DECLARE lv_latest_FileLoadId INT;
BEGIN
SELECT MAX(c."FileLoadId")
INTO lv_latest_FileLoadId
FROM table@databaselink c
WHERE c."account_code" = 'account123';
END;
END DATALINKTEST;
即使上面的存储过程也会生成一个" ORA-24777:不允许使用不可迁移的数据库链接"从Windows服务调用时。但是,当从控制台应用程序调用或直接通过SQL Developer调用时,它可以正常工作。
我有一种感觉,问题出在Oracle正在为Windows服务进行会话的类型上。当我在v $ session表上执行select时,我注意到Service会话有一个空SQL_ADDRESS和SQL_ID,而Console App和SQL Developer有一个SQL_ADDRESS和SQL_ID
提前致谢, 加布B