Oracle PL/SQL中"For Loop"的迭代次数

4

编写PLSQL块来显示给定数字中的奇数和总奇数?例如:如果给定数字为3,则显示如下: 1是奇数 3是奇数 在3个数字中共有2个奇数

CREATE OR REPLACE PROCEDURE odd_num(p_num NUMBER ) 
   IS s_num NUMBER;
BEGIN 
   FOR i_num IN 1..p_num  
      LOOP   
         IF mod(i_num,2) = 1 
         THEN     
            dbms_output.put_line(i_num ||' is Odd Number');  
         END IF; 
      END LOOP;  
   dbms_output.put_line('Total '|| s_num ||' Odd Numbers in '||p_num);
END;

什么是问题?看起来你想在循环中初始化s_num,然后在if语句中递增它。 - Justin Cave
1个回答

8

您只需要初始化并将counter赋值给s_num。只需在IF块内添加以下内容:

s_num := s_num +1;

例如,
SQL> CREATE OR REPLACE PROCEDURE odd_num(p_num NUMBER )
  2  IS
  3  s_num NUMBER;
  4  BEGIN
  5     s_num :=0;
  6     FOR i_num IN 1..p_num
  7        LOOP
  8           IF mod(i_num,2) = 1
  9           THEN
 10              -- Increment the counter once for each iteration
 11              s_num := s_num +1;
 12              dbms_output.put_line(i_num ||' is Odd Number');
 13           END IF;
 14        END LOOP;
 15     dbms_output.put_line('Total '|| s_num ||' Odd Numbers in '||p_num);
 16  END;
 17  /

Procedure created.

SQL> sho err
No errors.

让我们执行这个过程

SQL> SET SERVEROUTPUT ON
SQL> EXEC odd_num(5);
1 is Odd Number
3 is Odd Number
5 is Odd Number
Total 3 Odd Numbers in 5

PL/SQL procedure successfully completed.

SQL>

我想要的答案是“5中共有3个奇数”。 - Prabha Christ
@PrabhaChrist 欢迎来到 Stack Overflow。我知道了,我已经更新了。有一个愚蠢的拼写错误,我把计数器放在了 IF 循环之前,它应该在 IF 块内部。请标记为已回答。 - Lalit Kumar B

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接