gpt4 book ai didi

oracle - 如何使用 get_ddl 获取分区脚本?

转载 作者:行者123 更新时间:2023-12-02 04:23:28 34 4
gpt4 key购买 nike

我正在使用 Oracle 12c 作为数据库并使用以下方法获取表或其他对象的 ddl:-

dbms_metadata.get_ddl('TABLE','TABLE_NAME','SCHEMA_NAME');

与我正在使用的约束和引用约束相同:-

dbms_metadata.get_dependent_ddl('CONSTRAINT','TABLE_NAME','SCHEMA_NAME');
dbms_metadata.get_dependent_ddl('REF_CONSTRAINT','TABLE_NAME','SCHEMA_NAME');

现在我的问题是我想从表中提取分区脚本,我尝试了以下操作:-

从 dual 中选择 dbms_metadata.get_dependent_ddl('PARTITIONING','TABLE_NAME','SCHEMA_NAME');

但它给出了以下错误:-

ORA-31600: invalid input value PARTITIONING for parameter OBJECT_TYPE in function GET_DEPENDENT_DDL
ORA-06512: at "SYS.DBMS_METADATA", line 6069
ORA-06512: at "SYS.DBMS_METADATA", line 8761
ORA-06512: at line 1
31600. 00000 - "invalid input value %s for parameter %s in function %s"
*Cause: A NULL or invalid value was supplied for the parameter.
*Action: Correct the input value and try the call again.

我也试过:-

select dbms_metadata.get_ddl('PARTITION','PARTITION_NAME','SECONDARYUSER') from dual;

但它给出了同样的错误。

请建议我如何在 oracle 中使用 get_ddl 方法获取分区的 ddl。

最佳答案

分区是一个表选项,而不是一个单独的对象。默认情况下,表的 GET_DDL 应该生成分区信息。如果没有,则可能是您的 session 转换禁用了它。这两个语句肯定会生成一个包含所有分区选项的 DDL 脚本:

begin
dbms_metadata.set_transform_param(dbms_metadata.session_transform,'PARTITIONING',true);
end;
/

select dbms_metadata.get_ddl('TABLE','TABLE_NAME','SCHEMA_NAME') from dual;

如果您正在寻找一种方法来自动生成将表从非分区表转换为分区表的脚本,恐怕您就不走运了。尽管 12c 能够使用 ALTER TABLE 转换表,但 DBMS_METADATA_DIFF 包显然尚未更新以理解这些命令。

例如,如果您创建带分区和不带分区的同一张表,则此脚本不起作用:

select dbms_metadata_diff.compare_alter(object_type => 'TABLE', name1 => 'TABLE2', name2 => 'TABLE1') diffs from dual;

DIFFS
--------------------------------------------------------------
-- ORA-39266: Cannot alter unpartitioned table to partitioned.
ALTER TABLE "JHELLER"."TABLE2" RENAME TO "TABLE1"

幸运的是,在某些情况下,ALTER 语法看起来很简单。在我的简单示例中,我可以使用如下命令将表更改为分区:

alter table unpartitioned_table modify
[partitioning clause]
online;

关于oracle - 如何使用 get_ddl 获取分区脚本?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57519740/

34 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com