【发布时间】:2015-07-30 02:31:03
【问题描述】:
我想创建一个名为 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);
我想用 sql 语句从 people_table 的每一行中创建一个包含所有列的新表/结果,其中包含一个 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')
...
我希望现在更好理解
【问题讨论】:
-
深呼吸。删除这个问题。然后开始写一个新问题。这一次,包括样本数据和您想要的结果。找出一个没有任何想法的明确问题。如果您可以设置 SQL Fiddle,那就太好了。
-
欢迎来到 Stack Overflow!这是一个您可以就您编写的软件遇到的问题提出问题并获得答案的网站,但它不是一个您可以发布模糊规范并希望获得详细答案的地方。这里的人很有才华,但无法读懂你的想法。当你问一个问题时,你应该包括你编写的代码和你得到的具体错误,或者你的程序产生的结果和你期望的结果的解释。没有这些,我们真的无能为力帮助您。再次,欢迎来到 Stack Overflow!
-
除了 Gordon 的建议之外,您为什么还要这样做?它试图解决什么问题?一般来说,想出一个通用的解决方案只是要求一整船的痛苦。见:simple-talk.com/opinion/opinion-pieces/bad-carma
标签: sql oracle select dynamic casting