gpt4 book ai didi

database - 如何以编程方式从 Oracle 数据库生成 DDL?

转载 作者:太空狗 更新时间:2023-10-30 01:50:11 26 4
gpt4 key购买 nike

我有一项极其繁琐的任务,即从一个巨大的模式中找到几个表,并为这些表生成 DDL。

说,我有一个 schemaA 有 1000 个表,我需要查找 tableA 是否存在于这个 schemaA 中,如果它是,生成 DDL 并将其保存到文件系统,如果不是,则打印它的名称或将其写入文件。有什么想法吗?

最佳答案

DBMS_METADATA 包(假设您使用的是相当新的 Oracle 版本)将为数据库中的任何对象生成 DDL。所以

SELECT dbms_metadata.get_ddl( 'TABLE', 'TABLEA', 'SCHEMAA' )
FROM dual;

将返回带有 SchemaA.TableA 的 DDL 的 CLOB。您可以捕获抛出对象不存在的异常,但我倾向于建议您查询数据字典(即 DBA_OBJECTS)以验证 SchemaA 中是否存在名为 TableA 的表,即

SELECT COUNT(*) 
FROM dba_objects
WHERE owner = 'SCHEMAA'
AND object_name = 'TABLEA'
AND object_type = 'TABLE'

请注意,如果您无权访问 DBA_OBJECTS,则可以改用 ALL_OBJECTS。然而,这里的问题是 SchemaA 中可能有一个您没有 SELECT 访问权限的 TableA。该表不会出现在 ALL_OBJECTS(它包含您有权访问的所有对象)中,但它会出现在 DBA_OBJECTS(它包含数据库中的所有对象,无论您是否能够访问它们)。

然后您可以将 DDL 写入文件,或者如果计数为 0,则表明该对象不存在。从存储过程中,您可以使用 UTL_FILE 包写入数据库服务器上的文件。如果您尝试写入客户端文件系统上的文件,则需要使用能够访问客户端操作系统资源的语言。小型 C/Java/Perl/等程序应该能够选择 CLOB 并将该数据写入客户端操作系统上的文件。

关于database - 如何以编程方式从 Oracle 数据库生成 DDL?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4160865/

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