如何在创建视图时将关系表中的一些属性投射到varray中

问题描述 投票:1回答:1

我需要使用从关系表中的3个属性强制转换的VARRAY创建VIEW。

我尝试了很多方法,但是没有得到积极的结果。在oracle文档中也找不到解决方案。

CREATE TABLE Client (
    ID_Client       NUMBER(7,0),
    Phone1          VARCHAR2(9),
    Phone2          VARCHAR2(9),
    Phone3          VARCHAR2(9),
    CONSTRAINT      Client_PK
        PRIMARY KEY (ID_Client)
    );
/
CREATE TYPE phone_vartyp IS VARRAY(3) OF VARCHAR2(9);
/
CREATE TYPE client_objtyp AS OBJECT (
    ID_Client       NUMBER(7,0),
    Phones        phone_vartyp
    );
/
CREATE VIEW client_objv OF client_objtyp
    WITH OBJECT IDENTIFIER (ID_Client)
    AS SELECT c.ID_Client,
        CAST(MULTISET(SELECT c.Phone1, c.Phone2, c.Phone3
            FROM Client c) AS phone_vartyp)
    FROM Client c; -- ORA-00932
/
CREATE VIEW client_objv OF client_objtyp
    WITH OBJECT IDENTIFIER (ID_Client)
    AS SELECT c.ID_Client,
       (SELECT CAST(c.Phone1, c.Phone2, c.Phone3) AS phone_vartyp FROM Client c) as phone_vartyp
    FROM Client c; -- ORA-00905
/
DROP TABLE Client;
DROP TYPE client_objtyp;
DROP TYPE phone_vartyp;
sql oracle user-defined-types
1个回答
0
投票

似乎您在考虑这个问题。无需使用CASTMULTISET或子查询。从多个值创建VARRAY的最简单方法就是像使用函数一样使用类型,并将所有元素作为参数传递。

以下内容似乎起作用:

CREATE OR REPLACE VIEW client_objv OF client_objtyp
    WITH OBJECT IDENTIFIER (ID_Client)
    AS SELECT c.ID_Client,
              phone_vartyp(c.Phone1, c.Phone2, c.Phone3)
    FROM Client c; 
© www.soinside.com 2019 - 2024. All rights reserved.