You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PL/SQL存储过程如何判断是否从concurrent program中运行?

最优解决方案

直接调用Oracle EBS内置的FND_GLOBAL.CONC_REQUEST_ID函数即可,不需要查询任何表,性能远高于你现在用到的fnd_concurrent_requests查询方案。

这个函数的返回规则非常简单:

  • 如果当前代码在并发请求会话中运行,返回对应请求的数字ID(值大于0)
  • 如果不是从并发请求触发的运行,返回0

实现示例

你可以直接基于这个判断封装通用日志逻辑:

DECLARE
  l_conc_req_id NUMBER := fnd_global.conc_request_id;
BEGIN
  IF l_conc_req_id > 0 THEN
    -- 并发请求运行场景,输出到并发管理器日志
    fnd_file.put_line(fnd_file.log, '你要输出的日志内容');
  ELSE
    -- 独立运行场景,输出到dbms_output
    dbms_output.put_line('你要输出的日志内容');
  END IF;
END;
/

补充说明

  • 所有标准EBS环境默认都开放FND_GLOBAL包的访问权限,不需要额外做权限配置
  • 如果你确实需要查询并发请求的其他扩展信息,要优化原查询的话,可以给fnd_concurrent_requests的oracle_session_id字段新增索引,但绝大多数场景下用FND_GLOBAL.CONC_REQUEST_ID完全够用,不需要查表

内容的提问来源于stack exchange,提问作者Paul Moore

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.26 04:54:04