在 FOR 循环中第一次选择 20 条记录并在 oracle 中再次休息时出错

Posted

技术标签:

【中文标题】在 FOR 循环中第一次选择 20 条记录并在 oracle 中再次休息时出错【英文标题】:Getting error while select 20 record for first time in FOR loop and rest for anther time in oracle 【发布时间】:2018-12-18 10:59:52 【问题描述】:

在 Oracle 中,我通过使用 PL/SQL 变量 type v_arr is varray(25) of varchar2(20) 获得了总共 36 条记录。在 PL/SQL 块内,我使用 2 个不同的 FOR loop 进行 2 个不同的操作。在我第一次使用

For i in 1 .. v_arr.count(20) loop

下次我使用for i in v_arr.count(21) .. v_arr.count loop

编译后,两种情况都出现错误。如何解决这个问题。请帮帮我。

【问题讨论】:

v_arr.count(20) 无效,因为您可能会遇到错误。你想让(20) 做什么?计数就是计数。 “下一次……” - 什么是“下一次”,你想发生什么? Varrays 并不是真正用于 PL/SQL 编程 - 普通的 table of 构造提供了更多有用的功能。 【参考方案1】:

以巴巴罗斯的例子为基础,也许你想要这样的东西:

declare
    type a_arr is table of varchar2(20);
    arr  a_arr := a_arr
         ( 'un1','un2','un3','un4','un5','un6','un7','un8','un9','un10'
         , 'un11','un12','un13','un14','un15','un16','un17','un18','un19','un20'
         , 'x1','x2','x3' );
begin  
    for i in 1..least(arr.count,20) loop
        dbms_output.put_line(arr(i));
    end loop;

    if arr.count > 20 then
        for i in 21..arr.count loop
            dbms_output.put_line(arr(i));
        end loop;
    end if;        
end;

【讨论】:

威廉的好方法 @William 当我运行上述程序时,直到 1 到 20 时,分析表格的差距较小。但是从第 21 模式来看,第 20 和第 21 模式分析之间存在更多差距。那么如何解决这个问题。请帮帮我。 您正在收集统计数据?不确定这与问题有何关系。 @WilliamRobertson ***.com/questions/53871088/… 这里我提到了【参考方案2】:

我想你想要这个

SQL> set serveroutput on;

SQL> declare
  type a_arr is varray(20) of varchar2(20);
  arr  a_arr:=a_arr('un1','un2','un3','un4','un5','un6','un7','un8','un9','un10',
                    'un11','un12','un13','un14','un15','un16','un17','un18','un19','un20');
begin  
 for i in 1..arr.count
  loop
    dbms_output.put_line(arr(i));
  end loop; 
end;  

【讨论】:

我已经完成了,但是它花费了太多时间,而且它只适用于第一个循环,我也想要第二个循环。 用了多长时间?它在我的笔记本电脑上运行了 0.001 秒。 @Barbaros 当我运行上述程序时,直到 1 到 20 时,分析表格的差距较小。但是从第 21 模式来看,第 20 和第 21 模式分析之间存在更多差距。那么如何解决这个问题。请帮帮我。

以上是关于在 FOR 循环中第一次选择 20 条记录并在 oracle 中再次休息时出错的主要内容,如果未能解决你的问题,请参考以下文章