【发布时间】:2020-03-10 18:50:08
【问题描述】:
我在oracle数据库中做了一个procedure,它的功能是对数据库的对象进行一种清点。
基本上我必须得到table类型对象的DDL。
为此,我使用来自银行本身的查询:
select * from user_objects;
select * from user_constraints;
select * from user_source;
我的库存必须包含以下信息:
如何在不使用函数的情况下从对象中获取 DDL 命令:
dbms_metadata.get_ddl();
元数据库中没有其他现成的函数。
我也试过这个:
SELECT
(CASE WHEN line = 1 THEN 'create or replace ' || text ELSE text END) texto
FROM user_source
WHERE NAME = '....'
ORDER BY line
但是这个命令没有得到表对象的ddl。
【问题讨论】:
-
你为什么要重新发明轮子?您可以查询
dba_tables、dba_tab_columns、dba_constraints等以获取有关表和列的信息并手动为表构建 DDL,但这可能是一项重大工作,特别是如果您需要支持所有最后一个选项在create table -
@JustinCave 我不想重新发明轮子,这是一项学术工作,我正在努力按照老师的要求去做
-
从头开始创建 DDL 语句远远超出了学术课程的范围,您可能需要花费数周时间。
-
包DBMS_METADATA 是在Oracle 9 中引入的,所以也许你的导师最后一次使用Oracle 8 - 尝试将他指向包。与 Oracle 合作时,一项重要的技能是能够找到工作所需的工具和功能,而不是解决方法您知道存在但无法使用的功能(好吧,假设许可证不起作用;)
标签: sql database oracle plsql procedure