1

我有一组表,其中包含一个用户模式中的数据。我想要将这些副本提供给其他用户。

这可以用 SQL 完成吗?

谢谢

4

5 回答 5

1

如果两个用户在同一个数据库上,并且提供了足够GRANTS的用户,那么只需在新用户模式中运行以下语句:

create table <tablename> as select * from olduser.<tablename>;

编辑:

将以下语句集复制到文本文件中。替换<oldueser>为现有的模式名称和<path>您希望写入假脱机的 unix/windows 机器中的路径。在现有架构中运行此文件。一个假脱机文件将被写入以 name 指定的路径tbls.sql。使用它tbls.sql并在您希望复制表的新模式中运行它。

set head off
set line 100000
set line 100000
set feedback off
spool <path>/tbls.sql
select 'CREATE TABLE ' || TABLE_NAME ||' AS SELECT * FROM <OLDUSER>.'||TABLE_NAME||';'
FROM user_tables; 
spool off
set feedback on
于 2013-02-06T11:29:31.860 回答
0

是的,您可以在命令提示符下使用导出命令,即

c:\>exp userid=userid(sql admin)/password owner=username(from which user) direct=y file=filename.dmp

通过使用导入它

c:\>imp userid=userid(sql admin)/password file=filename.dmp fromuser=username(from which user) touser=username(imported username)

通过使用它,您必须将数据导出到转储文件中,然后将其导入另一个用户

于 2013-02-06T11:26:54.693 回答
0

create schema2.tablename as select * from schema1.tablename

于 2013-02-06T11:29:22.630 回答
0
  1. 您可以导出第一个架构并导入第二个架构 - 如果没有任何理由阻止您这样做,我会这样做。 文档在这里。

  2. 如果您有访问权限,您可以编写一个小脚本来为您执行此操作。您可以使用以下查询选择所有源用户的表:

    SELECT table_name FROM all_tables WHERE owner = <source_schema>

循环遍历所有这些表并使用立即执行创建新表。(文档在这里

execute immediate 'create <dest>.<tablename> as select * from <source>.<tablename>';

dest并且source是模式的名称。 tablename是取自循环的表的名称。

于 2013-02-06T11:54:21.323 回答
0

可能“CREATE TABLE ... AS SELECT”对您有用吗?

查看文档

这是一篇好文章

于 2013-02-06T13:58:38.783 回答