合并Oracle中的两个集合,我希望在奇数和偶数(逗号分隔)的基础上重新分配集合中的值;你有奇数吗
当前代码:合并Oracle中的两个集合,我希望在奇数和偶数(逗号分隔)的基础上重新分配集合中的值;你有奇数吗,oracle,plsql,Oracle,Plsql,当前代码: declare type c is table of number; c1 c; c2 c; c3 c; a number:=0; b number:=0; begin c1 := c(10,8,59,69,23); c2 := c(12,89,54,15,22); c3 := c1 multiset union c2; c1.delete; c2.delete; c1.extend(10
declare
type c is table of number;
c1 c;
c2 c;
c3 c;
a number:=0;
b number:=0;
begin
c1 := c(10,8,59,69,23);
c2 := c(12,89,54,15,22);
c3 := c1 multiset union c2;
c1.delete;
c2.delete;
c1.extend(10);
c2.extend(10);
for i in c3.first..c3.last loop
if mod(c3(i),2)=0 then
a:=a+c3(i);
else
b:=b+c3(i);
end if;
end loop;
dbms_output.put_line('sum for even is '||a);
dbms_output.put_line('sum for odd is '||b);
dbms_output.put_line('---------------');
end;
/
输出如下所示:
even number's are 10,8,12,54,22
odd number's are 59,69,23,89,15
sum for even is 106
sum for odd is 255?
在循环中扩展集合
c1
和c2
,并在其中添加元素:
declare
type c is table of number;
c1 c;
c2 c;
c3 c;
a number:=0;
b number:=0;
v varchar2(4000);
begin
c1 := c(10, 8, 59, 69, 23);
c2 := c(12, 89, 54, 15, 22);
c3 := c1 multiset union c2;
c1.delete;
c2.delete;
for i in c3.first..c3.last loop
if mod(c3(i),2)=0 then
a := a + c3(i);
c1.extend;
c1(c1.count) := c3(i);
else
b := b + c3(i);
c2.extend;
c2(c2.count) := c3(i);
end if;
end loop;
for i in 1..c1.count loop v := v || c1(i) || ', '; end loop;
dbms_output.put_line('Even numbers: '||rtrim(v, ', '));
v := '';
for i in 1..c2.count loop v := v || c2(i) || ', '; end loop;
dbms_output.put_line('Odd numbers: '||rtrim(v, ', '));
dbms_output.put_line('sum for even is '||a);
dbms_output.put_line('sum for odd is '||b);
dbms_output.put_line('---------------');
end;
结果:
Even numbers: 10, 8, 12, 54, 22
Odd numbers: 59, 69, 23, 89, 15
sum for even is 106
sum for odd is 255
---------------
编辑-解释:
c1(c1.count) := c3(i);
集合c1
在前一行中扩展了一个元素,在这一行中,它由c3
中的偶数填充c1。count
返回集合的最后一个索引
v := v || c1(i) || ', ';
在这一行中,我将集合中的元素连接到字符串变量v
。该变量接下来显示为元素列表
||rtrim(v, ', '))
从循环中,我们得到了类似于
1,3,5,7,
,因此需要rtrim
来删除上次出现的逗号,
,这非常不可读,请从堆栈溢出帮助中心编辑以下内容。您还没有问任何问题。。。。您的代码的哪一部分产生了错误/问题?您好,Pounder,非常感谢您的回复,如果您能解释第19、27、28行----c1(c1.count):=c3(i)----------v:=v | | c1(i)| |','----------||rtrim(v,,);它是如何工作的呢。。。。