get_release Oracle API返回"未知"结果而不是正确的版本

Wae*_*oul 5 oracle erp oracle-ebs

当从apps用户执行下面的get_release函数时,它返回正确的版本:12.1.3,但是当从另一个用户执行它时,它返回未知结果:

declare
l_release_name         varchar2(30);
l_other_release_info   varchar2(2000);
   begin
     if not apps.FND_RELEASE.get_release (l_release_name, l_other_release_info) then
         null;
     end if;
     dbms_output.put_line(l_release_name);
   end;
Run Code Online (Sandbox Code Playgroud)

FND_RELEASE.get_release 是一个公共包,从另一个用户调用它应该没有限制.

我在函数评论中找到的内容如下:

-- get_release() will usually return TRUE
  --  with RELEASE_NAME =
  --                    contents of RELEASE_NAME column in FND_PRODUCT_GROUPS
  --  and OTHER_RELEASE_INFO = null
  --
  -- If FND_PRODUCT_GROUPS.RELEASE_NAME contains imbedded spaces:
  --
  -- get_release() will return TRUE
  --  with RELEASE_NAME = FND_PRODUCT_GROUPS.RELEASE_NAME up to but
  --   not including the first imbedded space
  --  and OTHER_RELEASE_INFO = FND_PRODUCT_GROUPS.RELEASE_NAME
  --   starting with the first non-space character after the first
  --   imbedded space
  --
  -- On failure, get_release() returns FALSE. This will be a performance issue.
  --  Both RELEASE_NAME and OTHER_RELEASE_INFO will be set to 'Unknown'.
  --  This indicates that either:
  --  1) there are no rows in fnd_product_groups
  --     - this can be resolved by populating the row and it will
  --       be queried on the next call.
  --  2) there is more than one row in fnd_product_groups
  --     - delete all but the one correct row from fnd_product_groups and it
  --       will be queried on the next call. It's possible that the values
  --       returned by release_* and *_version routines are still correct if
  --       the first row in fnd_product_groups, ordered by product_group_id,
  --       if the currect row, but this will still be a performance problem.
Run Code Online (Sandbox Code Playgroud)

以前有人遇到过这个问题吗?!

小智 1

据我所知有3种可能性:

  1. 使用 invoker_rights_clause ( ) 编译的包FND_RELEASEAUTHID CURRENT_USER。它为用户apps和任何其他用户使用不同的源。
  2. 函数 FND_RELEASE.get_release 使用context访问。
  3. 在您的系统中使用的private database选项。它能够重写查询并向当前用户添加条件。(第 2 点的变体但隐式)