2016-08-15 67 views
0

選擇值在甲骨文工作11.2如何在Oracle VARRAY

我已經創建了一個電話號碼,一個類型與僱員相關.... 我想學習語法,不想成爲批評好壞數據庫不屑......

這裏是我的* .sql文件

CREATE TYPE AddressType AS OBJECT(streetNumber NUMBER(5), StreetName VARCHAR2(30), city VARCHAR2(20)); 
/
CREATE TYPE empName AS OBJECT(firstname VARCHAR2(10), middle VARCHAR2(10), lastname VARCHAR2(10)); 
/
CREATE TYPE PhoneNumbers AS OBJECT(phNumb NUMBER(10), numType VARCHAR2(10)); 
/
CREATE TYPE ContactNumbers AS VARRAY(5) OF PhoneNumbers; 
/

CREATE TABLE Workers(eid NUMBER(5), name empName, loc AddressType, contactNums ContactNumbers); 

INSERT INTO Workers VALUES(1, 
         empName('Ramos', null, 'Phil'), 
         AddressType(123, 'A Street', 'San Diego'), 
         ContactNumbers(
            PhoneNumbers(1234567890, 'cell'), 
            PhoneNumbers(2345678901, 'home') 
            ) 
        ); 


--Display all members of workers 
SELECT * FROM Workers; -- i get something here I'm ok with 

--Display all the names 
--SELECT (w.name.firstname||' '||w.name.middle||' '||w.name.lastname) as  "Name" FROM Workers w; --this works 

--Display their location 
--SELECT (w.loc.streetNumber||' '||w.loc.StreetName||', '||w.loc.city) as "Location" FROM Workers w; -- this works 

--Display their phone numbers 
SELECT (w.contactNums(1).phNumb||' <'||w.ContactNumbers(1).numType||'>') as "Phone Numbers" FROM Workers w; -- this line I can't figure out 

問:我怎樣寫最後SELECT讓我得到的電話號碼列表?

我想我的輸出看起來是這樣的:

phone Numbers 
------------- 
1234567890 <cell> 
2345678901 <home> 

回答

2

你將不得不使用TABLE運營商在VARRAY的情況下:

SELECT e.phNumb||' <'||e.numType||'>' as "Phone Numbers" 
FROM Workers w, TABLE(w.contactNums) e; 

Phone Numbers          
----------------------------------------------------- 
1234567890 <cell>          
2345678901 <home>  

你可以找到更多關於它的Database Oject-Relational Developer's Guide

+0

太棒了!所以我們必須執行與數組的聯接!我會檢查鏈接的更多信息,謝謝! – fifamaniac04

+0

這是正確的。如果你有多個VARRAY結構,你需要一個TABLE運算符。 – gvenzl