Oracle SQL将列与自定义类型

时间:2015-05-18 14:20:15

标签: sql oracle select dynamic casting

我想创建一个名为people_map的自定义类型,其中包含10个“anytype”类型的元素,可能还有其他类型:

CREATE OR REPLACE TYPE mem_type2 IS VARRAY(10) of VARCHAR2(15);

我所拥有的第二件事是一个包含不同类型的小于或等于10列的表。我们称这个表为people_table:

CREATE TABLE newnames (n varchar2(20),m int)
INSERT INTO newnames VALUES ('Beryl',0);
INSERT INTO newnames VALUES ('Fred',1);
INSERT INTO newnames VALUES ('a',2);
INSERT INTO newnames VALUES ('b',3);
INSERT INTO newnames VALUES ('c',4);

我拥有的第三件事是一张表格,其结果应该像这样写出:

CREATE TABLE club (id int, Members mem_type2);
INSERT INTO club VALUES (0, mem_type2('Brenda','Richard'));  
INSERT INTO club VALUES (1, mem_type2('Gen','John','Steph','JJ'));
INSERT INTO club VALUES (3,null);

我希望使用所有列的people_table的每一行创建sql语句,使用一个类型为people_map的新表/结果创建。

但我只有这个:

UPDATE club SET members = CAST(MULTISET(SELECT m FROM newnames where  m=0) as mem_type2) WHERE id <3;

这样可以正常工作,但仅适用于一列并且写入:

id  Members
...
3   .MEM_TYPE2('Beryl','Fred','a')
..

我想要这个:

id  Members
1   .MEM_TYPE2('0','Beryl')
2   .MEM_TYPE2('1','Fred')
3   .MEM_TYPE2('2','a')
...

我希望现在能更好地理解

1 个答案:

答案 0 :(得分:0)

我希望我现在在我的问题中写得更好。

目前我有了第一个解决方案。

CREATE TABLE club (id int, Members mem_type2);
CREATE OR REPLACE TYPE mem_type2 IS VARRAY(10) of VARCHAR2(15);
create or replace Type mem_type2_list as table of mem_type2;
Insert into club (members) (SELECT * FROM TABLE(CAST(MULTISET(SELECT CAST(mem_type2(n,m) AS mem_type2) FROM newnames) AS mem_type2_list))t);