2013-12-18 19 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':當我加入這行155 udt_tables.sql腳本工作。你確定所有類型創建成功嗎?一些IDE(例如PL/SQL Developer)將執行'create type'語句,但不會警告您這些異常。 –

+0

@jonearles:是的,我相信他們是成功創建的。我沒有使用IDE,而是使用符號'@ script.sql'在sqlplus CLI中加載腳本。到目前爲止,我認爲這可能是一些舊運行的遺留問題,也許我不是在乾淨的環境中工作,但我對oracle的管理並不熟悉。有沒有辦法清理會話,並重新開始一個乾淨的環境? – Throoze

+0

由於您的腳本沒有模式名稱,因此您應該可以在任何數據庫上以任何用戶身份運行它們。重新開始,你可以像這樣運行一個腳本:'drop table guide; drop type guide_t; drop type tourist_t; drop type phones_table_t; drop type languages_table_t;'。使用你的代碼,'tourist_t'應該失敗,PLS-00589:在對象類型「TOURIST_T」中找不到屬性。 –

回答

2

還需要爲超類型的屬性定義嵌套表存儲。

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