数据库中复制表结构、所有约束和权限的命令是:

17 浏览
0 Comments

数据库中复制表结构、所有约束和权限的命令是:

我对Oracle还不太熟悉。我想问一下是否存在一种单个命令,可以将表a复制到表b,使得表b具有与表a相同的数据、相同的结构和相同的访问权限?我想制作一个包含相同行为的表副本。

admin 更改状态以发布 2023年5月21日
0
0 Comments

如果你正在使用TOAD for Oracle,则选择表名并按F4。然后在描述窗口中选择脚本选项卡。\n\n这将生成表脚本。您只需要使用搜索/替换来更改表名并执行脚本。\n\n新创建的表将包含相同的行为。

0
0 Comments

如果我错了,有人请更正我,但我认为你不能以它的特权/索引进行复制。这可能是因为你需要为索引、主键等给出一个新名称,而数据库不知道这些名称应该被赋予什么。所以你可以这样做。

  1. 运行这个命令来获取你想要的表的DDL,然后用新表名替换它。(我的原始表是 TZ_TEST,我将创建一个 TZ_TEST_NEW。感谢这个答案获得了get_ddl命令)

    select replace(
        (SELECT dbms_metadata.get_ddl( 'TABLE', 'TZ_TEST' ) FROM DUAL),
        'TZ_TEST',
        'TZ_TEST_NEW') 
    

    from dual

  2. 执行DDL

  3. 使用这个来获取授予权限

    select replace(
    (select DBMS_METADATA.GET_DEPENDENT_DDL('OBJECT_GRANT','TZ_TEST') FROM DUAL),
    'TZ_TEST',
    'TZ_TEST_NEW') from dual
    

    同样使用DBMS_METADATA来获取约束/索引等。执行这些语句。

  4. 插入数据

    insert into TZ_TEST_NEW
    select * from TZ_TEST
    

  5. 请记住,如果你有一个自动生成的主键,在插入数据时,你需要将该列从insertselect语句中排除。

如果我漏掉了什么,请随时添加。

此外,我们可以创建一个过程来完成所有这些,但你需要小心所有的步骤。所以一旦你做了几次并且它起作用了,我们可以为它创建一个过程。

0