日期:2014-05-16  浏览次数:20441 次

jtf_rs_defresources_srp_v引起的问题 同义词无数据 基表有数据
今天搞了整一个上午。R12 Demo VIS中查询JTF.JTF_RS_SALESREPS有数据,但是查APPS.JTF_RS_SALESREPS_MO_V死活没数据。

看了下object属性:
SELECT *
  FROM all_objects
 WHERE object_name LIKE 'JTF_RS_SALESREPS%';

APPS.JTF_RS_SALESREPS_MO_V是JTF.JTF_RS_SALESREPS的同义词,想是编译出的问题,开始重编:
ALTER SYNONYM apps.JTF_RS_SALESREPS_MO_V COMPILE;
 
结果仍然没数据。。。上了metalink没找到结果。下午在一个帖子里无意中找到了类似的求助,解决方法很直接:
DROP SYNONYM JTF_RS_SALESREPS_MO_V;
CREATE SYNONYM JTF_RS_SALESREPS_MO_V FOR jtf.JTF_RS_SALESREPS;
 
Bingo!~~问题解决了,看到数据了。。。
具体原因上边说是原来的table被drop重建后造成的失效。。要重建synonym。残念~万恶的Oracle!


具有MOAC的SYNONYM-JTF_RS_SALESREPS_MO_V(jtf_rs_salesreps的同义词,加了一个POLICY,实现MOAC)


好像在oracle erp 中是很常见的....
例如: apps用户的RA_CUST_TRX_TYPES  和 RA_CUST_TRX_TYPES_ALL都是AR下RA_CUST_TRX_TYPES_ALL的同义词.但是RA_CUST_TRX_TYPES 不能查询出数据,而RA_CUST_TRX_TYPES_ALL可以查询出数据.

为什么同样的同义词,会出现这样的情况?
oracle 是怎么作到的?


现在,我们这边的老大给出了答案,确实这样的同义词和我们之前的是不一样的,数据和环境有关系.
初始化语句为
BEGIN  
FND_GLOBAL.apps_initialize(user_id =>  1116, --
                           resp_id =>  50512,  --
                           resp_appl_id =>  222,  --
                           security_group_id => null ,
                           server_id =>  null);             
MO_GLOBAL.INIT('SQLAP');
mo_global.set_policy_context('A',null);
end;

mo_global.init('ONT');


declare
 v number(20);
begin
  mo_global.init('ONT');
  select salesrep_id into v from JTF_RS_SALESREPS_MO_V where rownum = 1;
  dbms_output.put_line(v);
  end;
能打印出数据,原来需要写一个mo_global.init('ONT');