0

您可以通过执行获取表的 DDL DBMS_METADATA.get_DDL('Table','TABLENAME')。我正在寻找一种方法来更改 DDL 中表的名称,然后执行 DDL 以创建具有新名称和附加列的等效表。

DECLARE
stmt clob;
BEGIN
    SELECT dbms_metadata.get_ddl('TABLE', 'TABLE_NAME') into stmt FROM DUAL;
    /*change the name*/
    EXECUTE IMMEDIATE(stmt);
END;
4

3 回答 3

4

尝试这个 :

CREATE TABLE XXX as SELECT * FROM YYY WHERE 1 = 0;
于 2013-01-27T09:54:49.387 回答
2

尝试这个:

DECLARE

 v_seq NUMBER;
 v_orig_ddl CLOB;

 BEGIN

 v_seq := 13;

 v_orig_ddl := dbms_metadata.get_ddl('TABLE','TEST', 'BI');

 -- Rename Production tables with extension
 EXECUTE IMMEDIATE 'ALTER TABLE BI.TEST RENAME TO TEST_' || TO_CHAR(v_seq);

 EXECUTE IMMEDIATE v_orig_ddl; 

 END;

/

于 2013-01-27T16:40:13.627 回答
2

我会建议一些类似的东西:

DECLARE
stmt clob;
BEGIN

SELECT REPLACE (dbms_metadata.get_ddl('TABLE', 'TABLE_NAME'), 'CREATE TABLE ' || 'TABLE_NAME' , 'CREATE TABLE ' || 'NEW_TABLE_NAME') INTO stmt FROM DUAL;
 EXECUTE IMMEDIATE(stmt);
END;
于 2013-01-27T10:07:03.047 回答