假设我有三个表空间,一个是表空间A,用户名和密码都是ONE,另外一个是表空间B,用户名和密码都是TWO,A和B的表空间中的表结构都是一样的.
现在我想在第三个表空间C上建立视图,就是把A和B的每张表的数据合并起来
在SQL里就是SELECT * from  A.表1 union  SELECT * from  B.表1 的意思
不知道我有没有表述清楚,能否在ORACLE中实现?刚刚接触ORALCE所以不是很了解

解决方案 »

  1.   

    从你的话语中看出来你对一些基本的概念好像并不是特别清晰
    比如说SCHEMA,TABLESPACE,USERhttp://blog.csdn.net/wh62592855/archive/2009/10/16/4683983.aspx有兴趣的话可以去上面的链接看看
      

  2.   

    恩 ORACLE不是很了解 我先去看看你给的地址.感觉创建用户的时候只能选一个表空间,不知道怎么选择多个
      

  3.   

    恩 创建一个用户只能给他指定一个默认表空间
    当使用这个用户创建对象时如果没有显示的指定这个对象创建在哪个表空间中
    那么该对象就会被创建在用户的默认表空间中不过这不并不代表一个用户只能在一个表空间中创建对象
    如果某个用户拥有在其他表空间上的QUOTA 那么他也可以把对象创建到其他表空间中去
      

  4.   

    当前用户有限连接访问A和B表
    例:CREATE USER "QL_ARCHIVE"  PROFILE "DEFAULT" 
        IDENTIFIED BY "ql_archive" DEFAULT TABLESPACE "AL_ARCHIVE" 
        TEMPORARY TABLESPACE "TEMP" 
        ACCOUNT UNLOCK;
    GRANT CREATE ANY INDEX TO "QL_ARCHIVE"
    GRANT CREATE ANY TABLE TO "QL_ARCHIVE"
    GRANT CREATE ANY VIEW TO "QL_ARCHIVE"
    GRANT CREATE DATABASE LINK TO "QL_ARCHIVE"
    GRANT UNLIMITED TABLESPACE TO "QL_ARCHIVE"
    GRANT "CONNECT" TO "QL_ARCHIVE";
    GRANT "DBA" TO "QL_ARCHIVE";
    GRANT "RESOURCE" TO "QL_ARCHIVE";如果是不同数据库的,可以建立跨数据库访问,在C空间里同样可以访问A和B表:
    CREATE DATABASE LINK ONE
    CONNECT TO ONEIDENTIFIED BY ONE
    USING '(DESCRIPTION =
    (ADDRESS_LIST = 
    (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.1.100)(PORT = 1521))
    )
    (CONNECT_DATA =
    (SERVICE_NAME=ONE)
    )
    )'
    查看数据库连接:
    select owner,object_name from dba_objects where object_type='DATABASE LINK';删除数据库连接:
    drop  database link ONE
      

  5.   

    概念有点儿乱,从逻辑上说,表和表空间是没有关系的,表和方案schema的关系最密切。表空间是表的物理存储位置,所以多表视图的建立和表空间没有关系,倒是和方案关系密切。只要视图的 owner 有相关的表的 select 权限,或者相关表的 owner 赋给了视图 owner 对其表的查询权限,就可以建立视图了,而和表存储在那个表空间没有关系。
      

  6.   

    当然可以啊。不过是不同的 tablespace ,逻辑上没什么影响啊
      

  7.   

    --可以
    --1、ONE用户登录讲表1查询权限给用户C
    grant select on 表1 to C;
    --2、TOW用户登录讲表1查询权限给用户C
    grant select on 表1 to C;
    --3、C用户登录建立视图
    create or replace view view_name as
     SELECT * from  A.表1 union  SELECT * from  B.表1;
    --4、说一句,普通视图存储的只是sql定义,并不存储数据,其实并不具备你说的存到表空间C上,只是让C用户可以查询。