2013-06-14 2 views
1

오늘 내 이상한 일이 생겼습니다. 친구들 (개발자)이 버그라고 말했습니다 ...
보통 PL/SQL에서 테이블의 DDL을보고 싶을 때 테이블을 마우스 오른쪽 버튼으로 클릭하고 뷰를 클릭하면 DDL이 표시됩니다.
그러나 테이블의 DDL을 가져올 수있는 또 다른 방법이 있는데 테이블에서 마우스 오른쪽 버튼을 클릭하여 DBMS_METADATA라는 항목을 클릭하면 커서가 표시되고 DDL이 표시됩니다. 업로드 한 이미지에서 DBMS_METADATA와 'view'의 차이점은 .number 1은 'view'를 나타내고 2는 DBMS_METADATA를 나타내며 둘 사이에 큰 차이가 있음을 알 수 있습니다. 첫 번째 열은 organization_code 열을 보여줍니다. Null이 아니기 때문에 (체크되어 있지 않기 때문에), 두번째 것은 organization_code가 null이라는 것을 보여줍니다. 이로 인해 개발자들은 혼란 스러웠습니다. .하지만 열을 테스트 한 후 null이 아닙니다. 나는 칼럼이 주키라는 것을 언급해야만한다. 왜냐하면 왜 메디아가 잘못 된 정보를 보여준 것이 아니 었는가? 전에 누군가에게 무슨 일이 무엇입니까?

difference infoDBMS_METADATA와 다른 점은 '보기'입니다.

+0

어떤 도구입니까? PL/SQL은 IDE가 아닙니다. 이것은 프로그래밍 언어입니다. – OldProgrammer

+0

@OldProgrammer 스크린 샷을 기반으로하면 PL/SQL Developer입니다. –

답변

2

1 null 일 수 없습니다 기본 키에 사용되는 열 (그건 내가 11g를 사용하고 있습니다에 의해). 그러나이 제한은 기본 키 제한 조건을 통해서만 적용될 수 있으며 별도의 null이 아닌 제한 조건이 필요하지 않습니다. IDE, PL/SQL Developer는 기본 키 제약 조건과 null 제약 조건이 아닌 일반적으로 더 유용한 조합을 보여줍니다. 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 고유하지 않은 색인을 사용하지 않는 한.