我想创建一个名为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')
...
我希望现在能更好地理解
答案 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);