我先在system下建了一个用户xzq,然后将表、数据脚本导入xzq用户中。现在我又建立了3个用户,lolo,wf,xyf。我在xzq用户下grant dba to lolo,这样是可以查看到xzq用户下的表,但是,用lolo登陆,里面并没有表和数据。我的目的就是想用lolo用户登陆,也能看到表,不用select * from xzq.application这样的语句,直接select * from application就能查到,请问要如何做。新手上路,大家多多指教——————————

解决方案 »

  1.   

    用lolo登陆
    create table application as select * from xzq.application要不就在xzp下给application表建同义词
      

  2.   

    研究研究Grant语句吧。比如想让lolo看到xzq中的A表,可以使用:
    grant select on A to lolo;
    select等可以有很多选项,看你的需求。
      

  3.   

    创建同义词是最好的办法了
    create synonym synonyn_name for object;SQL基础--> 序列(SEQUENCE)、同义词(SYNONYM)
      

  4.   

    那就要自己写过程
    create table application as select * from xzq.application
    这个方式也没什么不好的吧,不就是多打两个字嘛
    不过你是建表还是同义词都是要占空间的
      

  5.   

    嗯,这种方法只是去除了查询语句中表的用户前缀吧,我的目的是想用lolo登陆客户端,在TABLES目录中显示xzq用户的表,不是靠查询语句才会出现的
      

  6.   

    那就只能是建表了,lolo建和xzp里的表
    你要在tables里看到那些表干嘛呢? 能操作不就可以了吗?非要看到它 又不是美女
      

  7.   


    --------你把这个语句修改下,然后把查询的结果复制到plsql中,执行下就行了
    Connected to Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 
    Connected as tiny
    SQL> 
    SQL> select 'create synonym ' || table_name || ' for ' || owner || '.' ||
      2         table_name || ';'
      3    from all_tables
      4   where owner = upper('scott')
      5  ;'CREATESYNONYM'||TABLE_NAME||'
    --------------------------------------------------------------------------------
    create synonym DEPT for SCOTT.DEPT;
    create synonym EMP for SCOTT.EMP;
    create synonym BONUS for SCOTT.BONUS;
    create synonym SALGRADE for SCOTT.SALGRADE;
    create synonym HIS_DEPT for SCOTT.HIS_DEPT;
    create synonym INSTOCK for SCOTT.INSTOCK;6 rows selectedSQL> 
      

  8.   

    --xzq  下运行begin
    for i in(select table_name from user_tables) loop
    execute immediate 'create synonym '||i.table_name||' for xzq.'||i.table_name;
    end loop;
    end;
      

  9.   


    同意!在Oracle中表是属于某个用户的就像Linux上的文件权限一样。你给其他用户赋权限就可以有这些资源了!