SQL*Plus 模拟 EBS环境

在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),另行参考数据库安全相关内容。

你可能感兴趣的:(EBS,-,二次开发)