在EBS中,很多SQL运行结果和SQL*Plus中运行结果完全不同,这主要是由于一系列的环境变量所致。一些可能影响SQL执行结果的因素有:
- 配置文件
- NSL_LANG设置
- 库存组织(R12中是MOAC,多组织访问控制)
- HRMS安全配置
- 基于Date-Track(时间跟踪)的SQL,一般是在HRMS中
- RLS (Row-Level Security)
下面是一系列模拟EBS环境的方法:
模拟库存组织
fnd_client_info.set_org_context();
或者:
dbms_application_info.set_client_info();
模拟EBS登陆环境
DECLARE
BEGIN
fnd_global.apps_initialize(user_id => < user_id >,
resp_id => < resp_id >,
resp_appl_id => < resp_appl_id >,
security_group_id => < fnd security GROUP id >,
server_id => );
END;
模拟语言环境
DECLARE BEGIN fnd_global.set_nls_context(p_nls_language => 'AMERICAN'); END;
模拟Date-Track
INSERT INTO fnd_sessions
(session_id, effective_date)
(SELECT userenv('SESSIONID'),
SYSDATE
FROM dual
WHERE NOT EXISTS (SELECT 'C'
FROM fnd_sessions s1
WHERE userenv('SESSIONID') = s1.session_id));
模拟HRMS安全配置
DECLARE
BEGIN
hr_signon.initialize_hr_security;
END;
至于RLS或者CLS(Cell-Level Security),另行参考数据库安全相关内容。