我有一组表,其中包含一个用户架构中的数据。 我希望将这些副本复制给其他用户。
可以用SQL完成吗?
由于
答案 0 :(得分:1)
如果两个用户在同一个数据库上,并且提供了足够的GRANTS
,那么只需在新用户模式中运行以下语句:
create table <tablename> as select * from olduser.<tablename>;
将以下一组语句复制到文本文件中。将<oldueser>
替换为现有模式名称,将<path>
替换为unix / windows机器中要写入假脱机的路径。在现有架构中运行此文件。假脱机文件将写入名称为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
答案 1 :(得分:0)
是的,您可以在命令提示符中使用export命令,例如
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)
通过使用它,您必须将数据导出到转储文件中,然后将其导入另一个用户
答案 2 :(得分:0)
create schema2.tablename as select * from schema1.tablename
答案 3 :(得分:0)
您可以导出第一个架构并导入第二个架构 - 如果没有任何理由阻止您这样做,我会这样做。 Documentation is here.
如果您有访问权限,则可以编写一个小脚本来为您执行此操作。 您可以使用查询选择所有源用户的表:
SELECT table_name FROM all_tables WHERE owner = <source_schema>
循环遍历所有这些并使用execute immediate创建新表。 (Documentation here)
execute immediate 'create <dest>.<tablename> as select * from <source>.<tablename>';
dest
和source
是架构的名称。
tablename
是从循环中获取的表的名称。
答案 4 :(得分:0)