如何在创建视图时将关系 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;
看来你想多了。无需使用 CAST
或 MULTISET
或子查询。从多个值创建 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;
我需要使用从关系 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;
看来你想多了。无需使用 CAST
或 MULTISET
或子查询。从多个值创建 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;