2013-12-18 1 views
3

숙제에 문제가 있습니다. 나는 다음과 같은 유형 정의가 있습니다Oracle sqlplus - 특성이 있지만 내포 된 테이블이있는 유형이 지정된 테이블을 정의합니다.

-- Type definitions 
CREATE OR REPLACE TYPE languages_table_t AS TABLE of VARCHAR2(20); 
/

CREATE OR REPLACE TYPE phones_table_t AS TABLE of NUMBER; 
/

CREATE OR REPLACE TYPE tourist_t AS OBJECT (
    -- ... 
    -- some simple attrubutes 
    -- one attribute of user defined type 
    -- more simple attrubutes 
    -- ... 
) NOT FINAL; 
/

CREATE OR REPLACE TYPE guide_t UNDER tourist_t (
    languages languages_table_t, 
    phones  phones_table_t 
); 
/
-- All types are created successfully 


-- table definitions: 

CREATE TABLE Tourist OF tourist_t (
    -- all simple attributes with nullity constraints 
    CONSTRAINT PK_TOURIST PRIMARY KEY (username), 
) NESTED TABLE the_UDT_attr STORE AS the_user_defined_type; 
-- Created successfully 

CREATE TABLE Guide OF guide_t (
    CONSTRAINT PK_GUIDE PRIMARY KEY (username) 
) NESTED TABLE languages STORE AS guide_languages 
    NESTED TABLE phones STORE AS guide_phones; 
-- returns mystic error 

마지막 만들 명령을 실행, 나는 다음과 같은 오류 얻을 :

CREATE TABLE Guide OF guide_t (
* 
ERROR at line 1: 
ORA-22913: must specify table name for nested table column or attribute 

나는이 오류를 검색했지만, 내 정의에 너무 구체적인 것을 , 나는 그것을 해결하는 방법을 찾을 수 없었다. 제발, 어떤 도움을 주시면 감사하겠습니다. 이러한 종류의 오류를 공격하는 방법, 오류를 해결하는 방법 또는 오류를 읽을 위치에 대한 아이디어가 필요합니다.

SQLPLUS의 버전은 다음과 같습니다

SQL> SELECT * FROM V$VERSION; 

BANNER 
---------------------------------------------------------------- 
Oracle Database 10g Enterprise Edition Release 10.2.0.4.0 - 64bi 
PL/SQL Release 10.2.0.4.0 - Production 
CORE 10.2.0.4.0 Production 
TNS for Solaris: Version 10.2.0.4.0 - Production 
NLSRTL Version 10.2.0.4.0 - Production 

당신이 날 도와 다른 정보가 필요하면, 질문, 나는 질문을 업데이트하겠습니다.

감사합니다.

+0

실제 열을'tourist_t'에 추가 한 후에 예제가 작동했습니다. 모든 유형이 성공적으로 작성 되었습니까? PL/SQL Developer와 같은 일부 IDE는'create type' 문을 실행하지만 예외를 경고하지는 않습니다. –

+0

@jonearles : 예, 성공적으로 생성되었습니다. 저는 IDE를 사용하지 않고 sqlplus CLI의 스크립트를'@ script.sql' 표기법으로로드합니다. 지금까지는 오래된 시스템이 남아있을 수도 있고 깨끗한 환경에서 작업하지 않을 수도 있지만 오라클 관리에 익숙하지 않습니다. 세션을 정리하고 깨끗한 환경에서 다시 시작하는 방법이 있습니까? – Throoze

+0

스크립트에는 스키마 이름이 없으므로 모든 데이터베이스에서 임의의 사용자로 스크립트를 실행할 수 있어야합니다. 다시 시작하려면 다음과 같은 스크립트를 실행할 수 있습니다 :'drop table guide; 강하 유형 guide_t; 낙하 형 관광객; 드롭 형식 phones_table_t; 드롭 유형 languages_table_t;'. 코드에서'tourist_t'는'PLS-00589 : 오브젝트 유형 "TOURIST_T"'에 속성이 없습니다. –

답변

2

또한 상위 유형의 속성에 대해 중첩 테이블 저장 영역을 정의해야합니다. udt_tables.sql 스크립트는 155 행에 추가 할 때 작동합니다 :

CREATE TABLE Guia OF guia_t (
    CONSTRAINT PK_GUIA PRIMARY KEY (username) 
) NESTED TABLE idiomas STORE AS guia_idiomas 
    NESTED TABLE telefonos STORE AS guia_telefonos 
    NESTED TABLE tipoHitosPreferidos STORE as something; 
+0

Thanks! 내 연구 파트너가 방금 그것을 알아 냈고, 나는 그것을 업데이트하기 위해 질문을 찾고있었습니다. 도와 줘서 고마워! – Throoze