Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
合并Oracle中的两个集合,我希望在奇数和偶数(逗号分隔)的基础上重新分配集合中的值;你有奇数吗_Oracle_Plsql - Fatal编程技术网

合并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,,);它是如何工作的呢。。。。