问题描述:   我在A 帐号下有两个视图  V1 与 V2. 现在我要将A帐号下的V1,V2视图的查询权限授权给  B帐号.  但问题出现. 我在Pl/Sql中, 登录  B帐号查询 V1视图与V2视图的数据. 其中 V1视图可以正常查询,但V2视图提示  表或视图不存在      还请大家帮忙,谢谢

解决方案 »

  1.   

    你的授权语句是怎么写的?
    用a登录
    grant select on v2 to b
      

  2.   

    你把V1和V2视图名字前加上用户名呢?
    select * from a.v1;
    select * from b.v2;
      

  3.   

    select * from a.v1;
    select * from a.v2;
      

  4.   

    但是你的问题也挺奇怪的如果赋权语句没错误的话,应该不会出现的问题。。
    你可以这样测试下
    select * from all_views where view_name='V2' and owner='A';
    使用b用户登陆,查看下上面的查询有没有记录
    如果有记录,你这个可以向oracle公司提bug了,
    如果没有肯定你的授权有问题。用A用户登陆
    执行
    grant all on v2 to b;
    然后使用b登陆,执行你的操作。。
    best wishes...
      

  5.   

    A帐号下
    grant all on v1 to b
    grant all on v2 to b你在试试视图中的基表授权看看
      

  6.   

    对的,你得贴出你的SQL语句出来,不然怎么知道哪里出的问题!
      

  7.   

    完整代码如下:create or replace view v_maindata as
    select distinct pro.fphase, ph.fname, ma.fieopclassid, cl.fieopclasschname fclassname,
           ma.fieopprocessid, cp.fieopprocesschname fprocessname, ma.fprodid, pro.fprodname,
           pro.fmodelid, pro.fpcnbomid, pro.fseasonyear, ma.fieoutsole, pro.fmtlverno, pro.fclrverno,
           pr.fstylecode || '-' || pr.fcolorcode || '-00' fstylecolorcode,
           ma.fieopengid, ma.ffctycomb, ma.fverno, ma.fdesc, ma.fdesclocal, ma.fpartname fpartid, tp.fstdpartnamech fpartname,
           ma.fneed_zcl, ma.fprocess_tot, ma.fbase_tot, ma.fneedrs_tot, ma.fslc_s, ma.fbasemd_tot,
           ma.fbasems_tot, ma.fallowance, ma.fworking_hour, ma.fsuggestmanpower, ma.ftakttime, ma.fshift,
           ma.fdayforlearningcurve, ma.fusermemo, ma.fmachinereqmemo, ma.fmanpoweroverratio, ma.fdaythroughput,
           ma.fneedsynco, ma.fdatastatusid, ts.fdatastatusdescch fdatastatus, ma.f, ma.fneedcalculateforsfc,
           ma.fbuilder, ma.fbdate, ma.freviser, ma.frdate, ma.freleasedate, ma.freleaser, ma.ftransferdate, ma.ftransfer
      from tblieopengmaster ma
      left join tblproductlastrel pr on pr.fprodid=ma.fprodid
      left join (select pr.fprodid, pr.fstylecode, pr.fcolorcode, p.fphase,
                        p.fprodname, p.fseasonyear, p.fmtlverno, p.fclrverno,
                        p.fmodelid, p.fpcnbomid
                 from tblproductlastrel pr
                 left join tblproduct p on pr.fprodid=p.fprodid) pro on pro.fprodid=ma.fprodid
      left join tblphase ph on pro.fphase=ph.fphase
      left join tblieopclass cl on ma.fieopclassid=cl.fieopclassid
      left join tblieopclassprocess cp on ma.fieopclassid=cp.fieopclassid and ma.fieopprocessid=cp.fieopprocessid
      left join tblstdpart tp on to_char(tp.fstdpartid)=ma.fpartname
      left join tbldatastatus ts on ts.fdatastatusid=ma.fdatastatusid
      where pr.fstylecode is not null and ma.fdatastatusid<>5
    如果将此段代码的Select后面的语句改成  select * from tablename  (其它简单的查询). 那么就不存在上面的问题. 但以上视图编译可以通过,并在本帐号下可以查询此视图. 依上看,是否视图的写法上有问题? 还请各位给点意见.谢谢
      

  8.   

    视图里面的基表一般情况下没有必要一一授权,请确认你的基表是否也包含其他schema或同义词的表。
    你的查询语句是否加了schema前缀
      

  9.   

    谢谢大家, 现在已OK拉,但有一点不明白.   我在视图里的每个Table都加schema前缀. 但为什么一定要加schema前缀才可以. 是否有人帮忙分析分析