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'. Вы уверены, что все типы созданы успешно? Некоторые IDE, такие как PL/SQL Developer, будут выполнять инструкцию 'create type', но не предупреждают вас об исключениях. –

+0

@jonearles: Да, я уверен, что они созданы успешно. Я не использую IDE, но загружаю скрипты в CLI sqlplus с обозначением '@ script.sql'. До сих пор я думаю, что это могут быть некоторые остатки старых трасс, и, возможно, я не работаю над чистой средой, но я не знаком с администрацией оракула. Есть ли способ очистить сеанс и начать снова с чистой среды? – Throoze

+0

Поскольку ваши сценарии не имеют имен схем, вы должны иметь возможность запускать их как любой пользователь в любой базе данных. Для начала вы можете запустить скрипт следующим образом: 'drop table guide; drop type guide_t; drop type tourist_t; тип падения phone_table_t; drop type 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

Спасибо! мой партнер по медицине просто понял это, и я искал вопрос, чтобы его обновить. Спасибо, что нашли время, чтобы помочь нам! – Throoze