- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在创建一个包来在我的模式中生成对象的 DDL(您解析对象名称,并使用 DDL 返回 clob
),因此我可以生成文件,并将它们直接放入 SVN。
我正在使用 dbms_metadata.get_ddl
,它适用于除表/物化 View 之外的所有对象。
如果我创建一个表:
create table stackoverflow
( col_1 varchar2(64)
, col_2 number
, col_3 date);
create index idx_test on stackoverflow(col_1);
alter table stackoverflow add constraint ui_test unique (col_2) using index;
begin
dbms_output.put_line(dbms_metadata.get_ddl( object_type => 'TABLE'
, name => 'STACKOVERFLOW')
);
end;
CREATE TABLE "TEST_SCHEMA"."STACKOVERFLOW"
( "COL_1" VARCHAR2(64),
"COL_2" NUMBER,
"COL_3" DATE,
CONSTRAINT "UI_TEST" UNIQUE ("COL_2")
USING INDEX PCTFREE 10 INITRANS 2 MAXTRANS 255 COMPUTE STATISTICS
STORAGE(INITIAL 131072 NEXT 131072 MINEXTENTS 1 MAXEXTENTS 2147483645
PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1
BUFFER_POOL DEFAULT FLASH_CACHE DEFAULT CELL_FLASH_CACHE DEFAULT)
TABLESPACE "USERS_DATA_TS" ENABLE
) SEGMENT CREATION IMMEDIATE
PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255
NOCOMPRESS LOGGING
STORAGE(INITIAL 131072 NEXT 131072 MINEXTENTS 1 MAXEXTENTS 2147483645
PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1
BUFFER_POOL DEFAULT FLASH_CACHE DEFAULT CELL_FLASH_CACHE DEFAULT)
TABLESPACE "USERS_DATA_TS"
begin
dbms_output.put_line(dbms_metadata.get_dependent_ddl( object_type => 'INDEX'
, base_object_name => 'STACKOVERFLOW'));
end;
CREATE INDEX "TEST_SCHEMA"."IDX_TEST" ON "MF"."STACKOVERFLOW" ("COL_1")
PCTFREE 10 INITRANS 2 MAXTRANS 255 COMPUTE STATISTICS
STORAGE(INITIAL 131072 NEXT 131072 MINEXTENTS 1 MAXEXTENTS 2147483645
PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1
BUFFER_POOL DEFAULT FLASH_CACHE DEFAULT CELL_FLASH_CACHE DEFAULT)
TABLESPACE "USERS_DATA_TS"
CREATE UNIQUE INDEX "TEST_SCHEMA"."UI_TEST" ON "MF"."STACKOVERFLOW" ("COL_2")
PCTFREE 10 INITRANS 2 MAXTRANS 255 COMPUTE STATISTICS
STORAGE(INITIAL 131072 NEXT 131072 MINEXTENTS 1 MAXEXTENTS 2147483645
PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1
BUFFER_POOL DEFAULT FLASH_CACHE DEFAULT CELL_FLASH_CACHE DEFAULT)
TABLESPACE "USERS_DATA_TS"
dbms_metadata
这对我来说似乎是不可能的。
dbms_metadata.SET_REMAP_PARAM(dbms_metadata.SESSION_TRANSFORM,'REMAP_SCHEMA','TEST_SCHEMA','');
hOpenOrig0 := DBMS_METADATA.OPEN('TABLE');
DBMS_METADATA.SET_FILTER(hOpenOrig0,'NAME',p_object_name);
DBMS_METADATA.SET_FILTER(hOpenOrig0,'SCHEMA',get_table.owner);
tr := dbms_metadata.add_transform(hOpenOrig0, 'MODIFY');
hTransDDL := DBMS_METADATA.ADD_TRANSFORM(hOpenOrig0,'DDL');
dbms_metadata.set_remap_param(tr, name => 'REMAP_SCHEMA', old_value => user, new_value => '');
get_package_spec.ddl := DBMS_METADATA.FETCH_CLOB(hOpenOrig0);
DBMS_METADATA.CLOSE(hOpenOrig0);
ui_test
的重复定义,您无法连接输出.是的,可以选择从 get_ddl
中删除约束。但我们正在失去约束/检查。 -- Create table
create table STACKOVERFLOW
(
col_1 VARCHAR2(64),
col_2 NUMBER,
col_3 DATE
)
tablespace USERS_DATA_TS
pctfree 10
pctused 40
initrans 1
maxtrans 255
storage
(
initial 128K
next 128K
minextents 1
maxextents unlimited
pctincrease 0
);
-- Create/Recreate indexes
create index IDX_TEST on STACKOVERFLOW (COL_1)
tablespace USERS_DATA_TS
pctfree 10
initrans 2
maxtrans 255
storage
(
initial 128K
next 128K
minextents 1
maxextents unlimited
pctincrease 0
);
-- Create/Recreate primary, unique and foreign key constraints
alter table STACKOVERFLOW
add constraint UI_TEST unique (COL_2)
using index
tablespace USERS_DATA_TS
pctfree 10
initrans 2
maxtrans 255
storage
(
initial 128K
next 128K
minextents 1
maxextents unlimited
pctincrease 0
);
dbms_metadata.get_xml
的 XML 解析器) 创建一个更漂亮的版本(缩进,顺序,一切都很好,准备在任何地方编译)。
user_indexes
但这不是重点。
DBMS_METADATA.SET_TRANSFORM_PARAM(DBMS_METADATA.SESSION_TRANSFORM,'PRETTY',true);
什么是“漂亮”是一个奇怪的定义。
最佳答案
dbms_metadata.get_dll 将 oracle 对象作为 xml 获取,然后通过 xslt 将其转换为 ddl 脚本。
有用表列表select table_name from all_tables where table_name like 'META%'
.
EXECUTE DBMS_METADATA.SET_TRANSFORM_PARAM(DBMS_METADATA.SESSION_TRANSFORM,'EMIT_SCHEMA',false); --undocumented remove schema
EXECUTE DBMS_METADATA.SET_TRANSFORM_PARAM(DBMS_METADATA.SESSION_TRANSFORM,'SEGMENT_CREATION',false); --undocumented remove segement creation
EXECUTE DBMS_METADATA.SET_TRANSFORM_PARAM(DBMS_METADATA.SESSION_TRANSFORM,'CONSTRAINTS_AS_ALTER',true);
select dbms_metadata.get_ddl( object_type => 'TABLE' , name => 'STACKOVERFLOW') from dual;
关于oracle - 如何使 dbms_metadata.get_ddl 更漂亮/有用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33897899/
我正在开发一个用于获取 Oracle 数据库对象的 ddl 的应用程序。 使用以下查询获取数据库的对象 SELECT object_name, object_type FROM dba_object
这是获取 DDL 或过程并使其美观的命令: EXEC DBMS_METADATA.SET_TRANSFORM_PARAM(DBMS_METADATA.SESSION_TRANSFORM , 'PRET
我想得到表CARD_TABLE的DDL在 XT模式 SQL> select dbms_metadata.get_ddl('TABLE','CARD_TABLE','XT') from dual;
dbms_metadata.get_ddl()用于获取对象的DDL,其具体用法如下。 注意:在sqlplus里,为了更好的展示DDL,需要设置如下参数: 复制代码代码如下: set line
我正在尝试使用 JAVA 调用生成 DDL: DBMS_METADATA.GET_DDL; DBMS_METADATA.SET_TRANSFORM_PARAM(DBMS_METADATA.SESSIO
我想通过 GET_DEPENDENT_DLL 获得一个对象的所有授权,删除该对象,然后能够使用 EXECUTE IMMEDIATE 再次授予它之前的所有权限。 为了获得 MYOBJECT 的 GRAN
我想获取所有表的所有表定义。我想快速完成(这是我经常运行的脚本的一部分) 我使用的是 oracle 11g,我有 700 个表。在普通的 jdbc 代码上,它需要 4 分钟并执行以下操作: s = c
我正在创建一个包来在我的模式中生成对象的 DDL(您解析对象名称,并使用 DDL 返回 clob),因此我可以生成文件,并将它们直接放入 SVN。 我正在使用 dbms_metadata.get_dd
我要 DDL s of Tables 以便我可以使用 UTL 将其放入数据库服务器Oracle 中的包。 问题是:当我们 select dbms_metadata.get_ddl('TABLE','T
(请原谅我的无知 - 我不是经验丰富的 Oracle 用户。) 我正在尝试使用 DBMS_METADATA.GET_DDL 函数(与 ALL_OBJECTS 或类似函数结合使用)来获取特定模式中所有表
在我们的项目中,我们有一个在 oracle 8i 上运行的数据库(我知道这个版本很古老但是......) 我想检查我尝试过的一个 PUBLIC 数据库链接的 DDL 语句: select dbms_m
我想使用 dbms_metadata 包获取数据库中所有角色的 ddls。不幸的是,当角色没有授权(对象、系统或角色类型)时,dbms_metadata.get_granted_ddl 失败并出现错误
我正在寻找命令行或脚本化解决方案,以便从 SQL Server 2005+ 中为所有数据库对象提取 DDL:表、存储过程、 View 、索引/索引、约束等。GUI 工具不感兴趣。 优先选择内置工具,因
我们有一个很大的现有脚本,可以在我们的客户数据库(的克隆)中删除和重新创建表。我们的客户可能稍微更改了表或索引定义,因此我们的脚本尝试使用 dbms_metadata.get_ddl 的输出来重新创建
我在使用 DBMS_METADATA 提取给定模式的 DDL 时遇到了麻烦,可能是因为我对它的理解是错误的。 这是我的主要工作: set termout off create table copy_d
我是一名优秀的程序员,十分优秀!