【问题标题】:How to Select value in Oracle Varray如何在 Oracle Varray 中选择值
【发布时间】:2016-08-15 21:55:23
【问题描述】:

在 Oracle 11.2 中工作

我创建了一个电话号码类型以与员工关联...... 我正在努力学习语法,不想因数据库设计的好坏而受到批评......

这是我的 *.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>

【问题讨论】:

    标签: sql oracle varray


    【解决方案1】:

    对于VARRAY,您将可以使用TABLE 运算符:

    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 中找到更多相关信息。

    【讨论】:

    • 太棒了!所以我们必须与数组执行连接!我会查看链接以获取更多信息,谢谢!
    • 没错。如果您有多个 VARRAY 结构,则每个结构都需要一个 TABLE 运算符。
    猜你喜欢
    • 2018-06-14
    • 1970-01-01
    • 2021-02-20
    • 1970-01-01
    • 1970-01-01
    • 2014-02-15
    • 2010-12-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多