今天发生了一些奇怪的事情,我的朋友(开发人员)说这可能是一个错误......
通常当我想在 PL/SQL 中查看表的 DDL 时,我右键单击该表,然后单击查看并我得到了 DDL 。
但是,还有另一种方法可以获取表的 DDL,通过右键单击表,然后我将光标放在它上面,它会显示 DDL。在我上传的图像中,DBMS_METADATA 和“视图”之间存在差异。数字 1 代表“视图”,数字 2 代表 DBMS_METADATA,如果您注意到两者之间存在巨大差异。第一个显示列组织代码它不为空(因为未检查),但第二个显示组织代码为空。这让开发人员感到困惑,他们应该依靠哪一个?.但是在测试该列后它不为空。我应该提到的是 column 是一个主键,所以它不应该是 null 为什么在 medata 中显示错误信息?以前有没有人发生过这种情况?(顺便说一句,我使用的是 11g)
问问题
170 次
1 回答
2
用于主键的列不能为 null 1。但是,该限制可以仅通过主键约束来强制执行,并且不需要单独的非空约束。IDE PL/SQL Developer 向您展示了通常更有用的主键约束和非空约束的组合。DBMS_METADATA 准确地向您展示了表是如何指定的,除非您打算删除主键,否则这无关紧要。
create table table1(a number not null primary key);
create table table2(a number primary key);
begin
dbms_metadata.set_transform_param(dbms_metadata.session_transform,
'SEGMENT_ATTRIBUTES',false);
end;
/
select dbms_metadata.get_ddl('TABLE', 'TABLE1') from dual;
CREATE TABLE "JHELLER"."TABLE1"
( "A" NUMBER NOT NULL ENABLE,
PRIMARY KEY ("A") ENABLE
)
select dbms_metadata.get_ddl('TABLE', 'TABLE2') from dual;
CREATE TABLE "JHELLER"."TABLE2"
( "A" NUMBER,
PRIMARY KEY ("A") ENABLE
)
在 PL/SQL Developer 中,两列都没有检查 Nullable。
1 除非您使用 novalidated 非唯一索引,这非常罕见。
于 2013-06-15T04:52:36.300 回答