我需要检查完整的DLL。我需要一个SQL查询相同。我需要检查表结构与触发器,约束
如果我在Oracle中使用DESC
或DESCRIBE
,它会向我显示所有列和类型。
但是我也需要所有的Constraints
,Triggers
作用于它等等。就像Oracle SQL Developer如果单击SQL
选项卡时显示结构一样。
什么应该是我的查询命令?
我需要检查完整的DLL。我需要一个SQL查询相同。我需要检查表结构与触发器,约束
如果我在Oracle中使用DESC
或DESCRIBE
,它会向我显示所有列和类型。
但是我也需要所有的Constraints
,Triggers
作用于它等等。就像Oracle SQL Developer如果单击SQL
选项卡时显示结构一样。
什么应该是我的查询命令?
带约束的表定义:
select DBMS_METADATA.GET_DDL('TABLE', 'MY_TABLE')
from dual;
上表中的触发器:
select DBMS_METADATA.GET_DDL('TRIGGER',trigger_name) from user_triggers where table_name='MY_TABLE';
对于约束:
Select constraint_name from all_constraints where table_name='Table_Name';
对于触发器:
select trigger_name from all_triggers where table_name='Table_Name';
任何SQL它可以提供我并发症ete DLL? –
DBMS_METADATA
包通常是检索对象DDL的最佳方法。
检索全部 DDL是一个挑战,因为有这么多不同类型的DDL。使用PL/SQL包和类型引用中的this long list of object types来选择必要的类型。有很多方法可以格式化结果并排除不同的设置。
在这个看似简单的任务上花费大量时间很容易。这是表格应该在版本控制的文本文件中“活”的原因之一,而不是数据库。您会发现使用DBMS_METADATA
和类似方法始终如一地从数据库中获得完全相同的结果几乎是不可能的。
示例模式
create table test1(a number, constraint test1_pk primary key (a));
create or replace trigger trigger1 before insert on test1
begin
null;
end;
/
grant select on test1 to system;
代码以提取DDL
declare
v_clob clob;
begin
--Add a semicolon at the end of each statement.
dbms_metadata.set_transform_param(dbms_metadata.session_transform, 'SQLTERMINATOR', true);
--Get DDL.
v_clob := v_clob || dbms_metadata.get_ddl('TABLE', 'TEST1', user);
v_clob := v_clob || dbms_metadata.get_dependent_ddl('TRIGGER', 'TEST1', user);
v_clob := v_clob || dbms_metadata.get_dependent_ddl('OBJECT_GRANT', 'TEST1', user);
--Print DDL (or insert it, save it to a file, etc.)
dbms_output.put_line(v_clob);
end;
/
结果
CREATE TABLE "JHELLER"."TEST1"
( "A" NUMBER,
CONSTRAINT "TEST1_PK" PRIMARY KEY ("A")
USING INDEX PCTFREE 10 INITRANS 2 MAXTRANS 255
TABLESPACE "USERS" ENABLE
) SEGMENT CREATION DEFERRED
PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255
NOCOMPRESS LOGGING
TABLESPACE "USERS" ;
CREATE OR REPLACE EDITIONABLE TRIGGER "JHELLER"."TRIGGER1" before insert on test1
begin
null;
end;
/
ALTER TRIGGER "JHELLER"."TRIGGER1" ENABLE;
GRANT SELECT ON "JHELLER"."TEST1" TO "SYSTEM";
我需要将这些数据放到.txt文件中。但有一些错误,它不会将完整的图片导出到我的txt文件上? http://stackoverflow.com/questions/35983994/oracle-spool-missing-complere-information –