sql - 从Oracle数据库获取所有建表脚本

标签 sql oracle scriptgenerate

我有一个 Oracle 数据库,其中有很多表和很多属性,例如:主键、唯一键、外键、索引、权限和分区。

我需要在新的 Oracle 数据库中创建具有相同属性的相同表。 有没有办法为我的数据库中的所有表生成单个创建脚本?

谢谢

最佳答案

是的。您可以执行以下查询,“Definition”列中的内容是一个 CLOB,其中包含相应对象的 DDL

SELECT OBJECT_TYPE,
       OBJECT_NAME,
       DBMS_METADATA.GET_DDL(OBJECT_TYPE, OBJECT_NAME) DEFINITION
  FROM DBA_OBJECTS
 WHERE OWNER = 'OWNER_NAME'
   AND OBJECT_TYPE IN ('FUNCTION',
                       'PACKAGE',
                       'PROCEDURE',
                       'SEQUENCE',
                       'TABLE',
                       'TRIGGER',
                       'VIEW')
 ORDER BY OBJECT_TYPE, OBJECT_NAME

下面是一个快速的 VB 脚本,有助于提取 CLOB

folder = "Folder_name"
connStr="<Your connection string here>"
if fetchFromDB=true then
    set c=CreateObject("ADODB.Connection")
    c.ConnectionString=connStr
    c.Open

    set r=CreateObject("ADODB.recordset")

    sql="SELECT OBJECT_TYPE, OBJECT_NAME, DBMS_METADATA.GET_DDL(OBJECT_TYPE,OBJECT_NAME) DEFINITION FROM DBA_OBJECTS WHERE OWNER='<OWNER_NAME_HERE>' AND OBJECT_TYPE IN ('FUNCTION', 'PACKAGE', 'PROCEDURE', 'SEQUENCE', 'TABLE', 'TRIGGER', 'VIEW') ORDER BY OBJECT_TYPE, OBJECT_NAME"
    r.open sql,c,3,1
    dim fs,f
    set fs=CreateObject("Scripting.FileSystemObject")
    do until r.EOF
        set f=fs.OpenTextFile(folder & "\\" & r("OBJECT_TYPE") & "_" & r("OBJECT_NAME") & ".sql",8,true)
        f.WriteLine r("DEFINITION")
        r.MoveNext
        f.close
    loop
    r.close
end if

关于sql - 从Oracle数据库获取所有建表脚本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30569620/

相关文章:

sql-server-2008 - 如何从 SQL Server Generate Script Data Only 中排除自动生成的列?

sql - 根据条件为记录分配排名

c# - Oracle 更改通知包含无效操作

MySQl 创建函数来检查字符串是否正确

database - 如何最好地管理数据库中的历史查找值?

java - 将日期从 java 插入到 Oracle DB

ruby-on-rails - Rails的文档 “script/generate model”在哪里?

sql - 如何在 SQL 中迭代所有名称和排名排列

sql - 查询在加入之前应用 Where 子句?