如何在创建视图时将关系 table 中的几个属性转换为 varray

How cast few atributes from relational table into varray on creating view

我需要使用从关系 table 中的 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;

看来你想多了。无需使用 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;