可否在shell脚本中使用FND_GLOBAL.CONC_REQUEST_ID获取并发程序请求ID
关于Shell脚本中获取EBS并发请求ID的问题解答
能否在Shell脚本中使用FND_GLOBAL.CONC_REQUEST_ID获取并发程序的request_id?
可以,但仅适用于被Oracle EBS并发管理器直接触发执行的Shell脚本场景。如果你是手动在操作系统层面执行该Shell脚本,不存在并发请求的运行上下文,FND_GLOBAL.CONC_REQUEST_ID会返回空值。
你提供的写法是否是正确的获取方式?
你的核心思路是正确的,但存在几个易导致异常的细节问题,需要优化调整:
- 依赖的环境变量
$FCP_LOGIN仅在并发管理器触发的脚本运行环境中存在,该变量存储了EBS APPS用户的数据库连接串,手动执行脚本时该变量为空会导致数据库连接失败。 - 现有写法没有过滤SQL查询返回的多余空白字符、空行,最终拿到的
v_request_id可能包含不可见的换行或空格,后续使用时会出现逻辑错误。 - 缺少
set pagesize 0配置,可能会返回多余的分页空行,干扰取值。
优化后的数据库查询写法
v_request_id=$(sqlplus -s /nolog <<EOF connect $FCP_LOGIN set echo off set head off set verify off set feedback off set trimspool on set pagesize 0 SELECT FND_GLOBAL.CONC_REQUEST_ID FROM DUAL; EOF ) # 去除返回结果中的所有空白字符,确保仅保留请求ID数字 v_request_id=$(echo $v_request_id | tr -d '[:space:]')
更推荐的无数据库查询写法
Oracle EBS并发管理器调用Shell类型的并发程序时,会自动把并发请求ID作为第一个参数传入脚本,不需要额外查询数据库,性能更高、稳定性更强:
# 无自定义参数时,直接取第一个参数即可 v_request_id=$1
注意:如果你在并发程序定义中配置了自定义传入参数,
$1固定为并发请求ID,$2及之后的参数才是你定义的自定义参数。
内容的提问来源于stack exchange,提问作者Supreetha
相关产品推荐
相关产品推荐

