我需要创建一个生产副本表结构(具有相似的约束,索引,分区)。目的是在后端更新/刷新该表,并最终与生产表交换;从而最大程度地减少停机时间。我想通过将原始生产表名称传递到存储过程中来动态地做到这一点。
我一直在用DBMS_METADATA.GET_DDL
进行测试,如下所示:
sql_stmt :=' SELECT dbms_metadata.get_ddl( ''TABLE'',''' || t_name ||''') from dual';
EXECUTE IMMEDIATE sql_stmt into v_sql;
我通过解析上面的v_sql字符串为新的临时表创建另一个sql字符串(DDL),并更改表,索引,主键,外键约束名称。最终将运行EXECUTE IMMIDIATE
创建此临时表。
有更简单的方法吗?通过DDL解析并更改新副本表的对象名称是一个繁琐的过程。
其次,当我将DBMS_METADATA.SESSION_TRANSFORM,’PARTITION’
设为TRUE
时,出现以下错误。我不确定是否由于变量(VARCHAR2(32676)
)的大小而导致我试图将生成的查询保存在其中:
ORA-06502: PL/SQL: numeric or value error
ORA-06512: at "Schema_Name.Procedure_Name", line 159
请告知