我有一组表,其中包含一个用户模式中的数据。我想要将这些副本提供给其他用户。
这可以用 SQL 完成吗?
谢谢
如果两个用户在同一个数据库上,并且提供了足够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
是的,您可以在命令提示符下使用导出命令,即
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)
通过使用它,您必须将数据导出到转储文件中,然后将其导入另一个用户
create schema2.tablename as select * from schema1.tablename
您可以导出第一个架构并导入第二个架构 - 如果没有任何理由阻止您这样做,我会这样做。 文档在这里。
如果您有访问权限,您可以编写一个小脚本来为您执行此操作。您可以使用以下查询选择所有源用户的表:
SELECT table_name FROM all_tables WHERE owner = <source_schema>
循环遍历所有这些表并使用立即执行创建新表。(文档在这里)
execute immediate 'create <dest>.<tablename> as select * from <source>.<tablename>';
dest
并且source
是模式的名称。
tablename
是取自循环的表的名称。